All posts by 龙生

ASP.NET Core 性能对比评测(ASP.NET,Python,Java,NodeJS)

前言 性能是我们日常生活中经常接触到的一个词语,更好的性能意味着能给我们带来更好的用户体检。比如我们在购买手机、显卡、CPU等的时候,可能会更加的关注于这样指标,所以本篇就来做一个性能评测。 性能也一直是我们开发人员一直追求的一个目标,我们在做语言选择,平台选择,架构选择的过程中都需要在性能之间做衡量。 同样性能对 .NET Core 团队来说也是至关重要的,一项新技术的诞生,除了对生产力的提高,还有技术团队对性能的追求。 今天,我们就来做一个对比测试,来看看微软的这样新技术性能到底怎么样,俗话说的好:“是骡子是马,拉出来溜溜”。 下面让我开始吧。 目录 测试目标 测试工具 环境准备 开始测试 ASP.NET Core Kestrel vs ASP.NET Core IIS ASP.NET Core IIS vs ASP.NET IIS ASP.NET Core Kestrel vs ASP.NET IIS ASP.NET Core vs Python Django ASP.NET Core vs Java Servlet ASP.NET Core vs NodeJS 总结 测试目标 在测试之前,我们必须要明确我们本次测试想达到的一个目标。本次测试主要是测试应用程序的一个吞吐量。其中QPS,并发数,响应时间是我们衡量吞吐量的几个重要指标。 以下是本次对比测试的任务目标: 编号 对比方 系统环境 宿主环境 测试目标 1 ASP.NET Core vs ASP.NET Core Windows Kestrel vs IIS 相同平台不同宿主间性能差距 2 ASP.NET Core vs ASP.NET Windows IIS vs IIS 相同平台相同宿主不同框架间性能差距 3 ASP.NET Core vs ASP.NET Windows Kestrel vs IIS 相同平台不同宿主不同框架间性能差距 4 ASP.NET Core vs Python Django Linux Kestrel vs uwsgi 相同平台不同语言不同宿主不同框架间性能差距 5 ASP.NET Core vs Java Servlet Linux Kestrel vs Tomcat […]

龙生   16 Sep 2017
View Details

性能测试工具 wrk 安装与使用

介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以支持lua脚本来创建复杂的测试场景。 wrk 的一个很好的特性就是能用很少的线程压出很大的并发量, 原因是它使用了一些操作系统特定的高性能 I/O 机制, 比如 select, epoll, kqueue 等。 其实它是复用了 redis 的 ae 异步事件驱动框架. 确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知. wrk GitHub 源码:https://github.com/wg/wrk 安装 wrk只能运行于 Unix 类的系统上,也只能在这些系统上便宜,所以我们需要一个Linux或者macOs。 不得不说,使用了 Win10之后方便很多。 必备条件: Win10 RS及以上版本 启用Ubuntu子系统 1、Win10 系统通过bash命令,切换到Ubuntu子系统。 然后需要安装一下编译工具,通过运行下面命令来安装工具:

安装 gcc 编译环境的时候最好挂一下VPN,速度会快些。 2、安装完成之后使用 git 下载 wrk 的源码到本地:

3、切换到git的wrk目录,然后使用make命令:

编译完成之后,目录下面会多一个 wrk 的文件。 测试 使用以下命令来测试一下:

简单说一下wrk里面各个参数什么意思? -t 需要模拟的线程数 -c 需要模拟的连接数 --timeout 超时的时间 -d 测试的持续时间 结果: Latency:响应时间 Req/Sec:每个线程每秒钟的完成的请求数 Avg:平均 Max:最大 Stdev:标准差 +/- Stdev: 正负一个标准差占比 标准差如果太大说明样本本身离散程度比较高. […]

龙生   16 Sep 2017
View Details

ASP.NET Core Kestrel 中使用 HTTPS (SSL)

在ASP.NET Core中,如果在Kestrel中想使用HTTPS对站点进行加密传输,可以按照如下方式 申请证书 这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件。 添加NuGet包 nuget中查找然后再程序中添加引用Microsoft.AspNetCore.Server.Kestrel.Https 配置 把*.pfx结尾的文件拷贝的程序的Web根目录,然后修改Programs.cs文件:

  然后命令行窗口运行dotnet xxx.dll --server.urls https://www.example.com:port即可。 本文地址:http://www.cnblogs.com/savorboard/p/aspnetcore-kestrel-https.html 作者博客:Savorboard 欢迎转载,请在明显位置给出出处及链接

龙生   16 Sep 2017
View Details

ASP.NET Core 缓存技术 及 Nginx 缓存配置

前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx的反向代理来降低我们后端应用程序的压力。那除了以上两点之外,其实我们还可以利用代理服务器的缓存功能来进一步的降低后端应用程序的压力,提升系统的吞吐量(tps)。这一篇就来看一下具体应该如何去做吧。 目录 WEB 缓存 ASP.NET Core 缓存 内存缓存 分布式缓存 Response 缓存 Nginx 缓存 总结 WEB 缓存 之所以加这个目录是因为有一部分初学者对缓存的认知不够,特别是WEB中的缓存。 缓存它是一种空间换取时间的一种技术。 Web缓存(或HTTP缓存)是用于Web文档,如HTML页面和图像,减少带宽的使用,服务器的负载的一种信息技术。一个Web缓存系统存储通过Cache来传递的文件的副本;如果满足某些条件,则可以从缓存中得到后续的请求。 WEb缓存有几种方式: 1、服务端缓存 利用 Memcached,Redis,In-Memery 等缓存技术实现对数据的缓存。 2、代理服务器缓存 利用类似nginx的反向代理服务器,对请求的url对应的输出的进行缓存。这个缓存和应用程序实现的动态页面缓存类似,只不过用反向代理充当了应用程序的缓存实现。 3、客户端缓存 浏览器缓存,其实主要就是HTTP协议定义的缓存机制(如: Last-Modified,If-Modified-Since,Expires; Cache-control等)。 ASP.NET Core 缓存 内存缓存 最简单的一种缓存,ASP.NET Core 提供了 IMemoryCache 接口来供我们使用。它存储在本地的 WEB 服务器内容中,注意是单机的 WEB 服务器,如果你需要部署的是一个服务器集群的话,那么你应该用分布式缓存,而不是选择这个。 就不详细介绍了,想了解的可以直接看官方文档。 分布式缓存 随着云应用和服务器集群以及 docker 等技术的成熟,越来越多的应用程序开始考虑集群部署,因为它具有更好的性能和可伸缩可扩展性。那么这个时候就需要用到分布式缓存了。 在 ASP.NET Core应用中,已经对分布式缓存做了抽象,提供了 IDistributedCache 接口,该接口提供了添加,检索,删除等的同步和异步的方法。并且还默认提供了 Redis 和 SQLServer 的分布式缓存实现,我们也可以实现 IDistributedCache 接口来扩展自己的缓存系统。 需要说明的是Get,GetAsync和Set,SetAsync。 这两个接口方法默认是使用的byte[],之所以没有提供直接存储对象的方法是因为微软想把这个默认序列化的选择交给用户,因为每一个团队的偏好是不一样的,有些团队喜欢使用 XML,有些喜欢使用 JSON,有些喜欢使用 Protobuf 等,所以在 项目中,你可以根据自己的偏好来扩展想要的方法。 具体使用方法还是直接看官方文档好了。 关于使用也可以查看我的另外一篇博客: ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存。 Response 缓存 在 ASP.NET Core中,有一种缓存叫做Response缓存,这个缓存主要是用来做代理服务器的缓存。它主要原理是在输出的HTTP Response的header里面添加指定的缓存标记。这些缓存标记用来让客户端或者代理服务器来识别需要缓存的内容。然后当客户端有请求到代理服务器的时候,代理服务器可以识别出一部分请求,然后直接把结果返回给浏览器,从而提高后端应用程序的性能和吞吐。 从这个图中看出来,在第一次的时候,一个客户端请求经过代理服务器请求的我们后端的WEB服务器上,然后WEB服务器在返回结果的META上添加了cache-control标签,它的值为public。 下面是cache-control标签一些值的说明: public 指示响应可被任何缓存区缓存。 […]

龙生   16 Sep 2017
View Details

ASP.NET Core 十种方式扩展你的 Views

原文地址:http://asp.net-hacker.rocks/2016/02/18/extending-razor-views.html 作者:Jürgen Gutsch 翻译:杨晓东(Savorboard) 现在,已经有很多种方式来扩展Razor视图了,我们循循渐进,先从最简单的开始。 如果你之前熟悉MVC5(以及之前的MVC)中的视图的话,有一部分你应该已经很熟悉了。在新的ASP.NET Core 中,那些你熟悉的方式有一部分仍然能用,只是Core版本针对视图又添加了一些东西。这篇文章,我们就来一起看看吧。 #1:数据视图(Typed Views) 这是一个不具有动态内容的最基本的一个视图,就是你定义一个ViewModel , 然后ViewModel具有一些默认值,在视图上直接呈现而已。定死的ViewModel,好像不是很常见,以至于你使用Visual Studio新建一个默认的Web应用程序的话,都看不到它。它就看起来像一个*.cshtml结尾的HTML文件,但是,cshtml文件却是服务端可以解析的一种文件,所以你可以在里面使用一些Razor语法,比如HtmlHelpers,UrlHelpers等。同样,你可以使用ViewBag或者ViewData来从Controller的Action传输数据到View里面,来让它具有动态的内容。但是ViewBag和ViewData都是弱类型的,所以没有智能提示,用起来略不爽。 要在你的视图中使用强类型数据对象,你需要定义一个Model来在视图中使用。

这种方式是不是很常见的? 下一种方式是一个更好的方式来布局我们的视图: #2:布局(Layouts): 相当于ASP.NET的WebForms的母版页,不过它是定义Razor视图的基本布局的一种方式。它就是_Layout.cshtml, 位于 Views\Shared 文件夹里 。通常情况下这个文件通常包含HTML的header,body和公用的一些东西。你可以多建几个互相进行组合,来完成整个站点的布局。其他页面引用布局视图页的时候,是这样子写的(注意不需要扩展名):

此调用需要在您的视图的第一行中。但你不需要在每一个视图中定义布局,如果你使用Visual Studio新建一个ASP.NET Core项目,Views文件夹有一个_ViewStart.cshtml,在运行的时候它会自动的导入到每个视图中去。 在_Layout.cshtml有一个方法法叫 RenderBody(),它就是用来渲染详细的视图页到模板布局视图中:

在此方法的位置,详情视图就会被渲染到这里。 #3: 区域(Sections) 有时候子视图中想在主视图中显示一部分html代码,比如javascript代码或者是css,这个时候就可以使用Sections,通常情况下在页面的结尾部分。 在主视图中(_Layout.cshtml)定义一个Javascripts Section:

有一个required参数来声明这个Section是否必须的。然后你就可以在子视图中这样使用:

如果你使用嵌套的布局,你可能需要嵌套这个区域。意思就是你在Section里面嵌套调用RenderSection():

#4: 分部视图( PartialViews) 你可以提取html页面中重用的部分,把它放到一个新的Razor视图中,这个视图没有自己的Action,这种视图就叫做分部视图。 分部视图通常也在Views\Shard\文件夹。 分部视图同样也可以是一个数据视图,它可以从父视图中获取数据(但不是必须的):

这个分部视图需要从父视图中获取用户列表的数据

如果你的分部视图没有定义用户模型,你就不需要传第二个参数。 #5:视图组件(ViewComponents) 这个 ASP.NET Core特有的。 译者注:类似于以前的用户控件 有时候你需要做一些分部视图的事情,但是又包含一些业务逻辑在里面。在过去,你可以使用ChildAction渲染结果到一个视图中,但是,在 ASP.NET Core中,有一种新的方式来做这件事情,它就是ViewComponents(我已经写了一篇关于ViewComponents的博文)。它类似于在MVC中的一种迷你的MVC,也就是说他们可以有自己的Controller,和单个的action以及view。ViewComponents是完全独立于你的当前视图的,但是可以通过你当前的视图传输数据。 想这样调用它,来渲染一个ViewComponents:

可以看我的博客来学习怎么创建自己的ViewComponent。 #6: HTML助手(HtmlHelpers) 在HTMLHelper类中,你可以创建你自己的扩展方法来扩展Razor语法:

在你的视图中,创建一个可重用的部分是非常有用的,它比分部视图多包含了一些业务逻辑。比HTMLHelpers扩展更好的是新的TagHelpers,但是在扩展你视图的时候,HTMLHelpers仍然有它自己的一些适用的地方。 #7: 标签助手(TagHelper) 这是 ASP.NET Core 非常好的一个新特性。 一个扩展你视图的小助手,它看起来像一个原生的HTML标签一样。 在ASP.NET Core MVC中你应该使用 TagHelpers 来替换 HtmlHelpers,因为它们更加的简洁和容易使用。另一个巨大的好处就是依赖注入,在HtmlHelpers中是使用不了的,因为HtmlHelpers 扩展的都是静态内容。 但TagHelpers是一个公共类,我们可以很容易的在它的构造函数中注入服务。 下面是一个很简单的小示例,来展示怎么样定义一个TagHelper:

这里定义了一个叫做hi的标签,它以HTML标记来呈现,p标签的内容是当前时间。 使用:

结果:

[…]

龙生   16 Sep 2017
View Details

ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程,来保证我们的程序在异常或者是电脑重启的时候仍然能够正常访问。 如果你以后用准备使用 asp.net core来开发项目的话,程序并且部署到 Linux 上的话,那么此篇文章你值得收藏。 如果你觉得对你有帮助的话,不妨点个【推荐】。 目录 什么是守护进程 Supervisor 介绍 Supervisor 安装 Supervisor 配置,常用命令 Supervisor UI管理台 什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。 此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。 在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。 原因有两点: 1、它是微软官方文档推荐的,降低学习成本。 2、它并不一定是最好的,但一定是文档最全的。 Supervisor 介绍 Supervisor是采用 Python(2.4+) 开发的,它是一个允许用户管理 基于 Unix 系统进程的 Client/Server 系统,提供了大量功能来实现对进程的管理。 官方文档:http://supervisord.org/ Supervisor 安装 在 masOS 中直接使用brew工具进行安装即可: brew install supervisor 在 linux 中使用以下命令进行安装: ubuntu sudo apt-get install supervisor centos yum install supervisor python pip install supervosor easy_install supervisor 安装完成之后:

  Supervisor 配置,常用命令 安装完成之后,在 /ect/supervisor/conf.d/ 目录下新建一个配置文件(touch HelloWebApp.conf),取名为 HelloWebApp.conf […]

龙生   16 Sep 2017
View Details

《领域驱动设计的原则与实践》读书笔记(一)

  Chapter 1 什么是DDD: 1、介绍领域驱动设计思想体系     和传统开发方式比起来,领域驱动是一种新的软件架构设计,它主要用来解决传统开发中代码杂乱无章,任意拼贴等最终导致程序难以维护而诞生的。     它提出软件变得复杂和难以管理的主要原因是,领域复杂性和技术复杂性混合在了一起。 2、DDD如何管理复杂性     提炼问题重点、创建模型解决问题、使用公共语言建模协作、理解上下文关系。     DDD的侧重点:核心领域、协作、与领域专家探讨、复杂域模型的上下文理解。 3、DDD常见误区     DDD是框架、DDD是灵丹妙药    Chapter 2 提炼问题域: 1、知识提炼,领域知识的重要性 2、业务分析员,提炼知识是一个持续过程,每一次迭代,模型都会有所变化。 3、与领域专家一起获得见解 4、使用BDD专注于应用程序的行为    Chapter 3 专注于核心领域: 1、找出核心,支撑和通用域 2、提炼有助于降低问题空间的复杂性 3、并非一个系统的所有部分都被精心设计    Chapter 4 模型驱动设计: 1、Code First模型驱动设计 2、使用该领域的通用语言来在代码中描述,代码是表述模型的主要形式,需要使用通用语言来约束它。 3、要让团队里面领域中隐含的观念变得明确并赋予会组成共享通用语言的名称。 4、通用语言应该用于测试,类名称,和方法。 5、仅为核心领域应用模型驱动设计并创建UL才能带来变化,不要将这些实践应用到整个应用程序。    Chapter 5 领域模型实现模式: 1、领域层:是包含领域模型的代码区域,他将领域模型的复杂性和应用程序偶发的技术复杂性隔离开来,负责确保基础架构关注的是想管理事务和持久化这样的问题,而不会掺入业务问题并却不会让领域中已经有的规则变模糊。                               图1、表示领域模型代码仅构成整体代码库的一小部分 2、领域模型模式是基于没有数据库前提的,因此它可以演化并且以完全忽略持久化的方式来创建。       在设计领域模型时,不要从数据模型开始。相反要从代码模型开始(Code First),与数据驱动设计相反的模型驱动。仅当必须考虑模型持久化时,才能在设计上做出让步。模型内的领域对象成为普通老方C#对象(POCO)。这些类不再与基础架构问题有关并却完全忽略持久性。      3、事务脚本:事务脚本整个用例都是封装在单个方法中,如数据检索,持久化,事务管理,和业务逻辑。      事务脚本缺点:对于不知道面向对象的程序员来说是一种有帮助的模式,但是如果逻辑变得复杂,事务脚本会变得很难管理,事务脚本就会出现问题。      表模式:单个对象代表数据库中的一个表或视图,适合于数据库驱动设计(DB First),不适合DDD。这个模式适合于领域中由有界上下文隔离的更简单 部分以及简单数据形式来说,非常合适并且比领域模型模式更易于掌握。但是如果对象模型和数据库模型出现分歧,那么就需要朝着DDD模式的方向进行重构。 4、活动记录:类似于表模式,是一种流行的模式,每个业务对象都负责其自身的持久化一起相关的业务逻辑,类似于Repository<T>。 5、贫血领域模型:又称为反模式。违背了“只问不说”的原则,这个模式下领域服务会承担代码更具程序性风格的角色。贫血模型是DDD中一个良好开局。    Chapter 6 使用有界上下文维护领域模型的完整性: 1、大模型容易出错,系统扩展越多,模型越复杂 2、使用有界上下文和破除大模型 3、有界上下文拥有从展现层到领域逻辑层,再到持久化,甚至到数据存储功能的垂直切片。 […]

龙生   16 Sep 2017
View Details

SQL语句优化(转载)

一、操作符优化 1、IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。 推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。 2、NOT IN操作符 此操作是强列不推荐使用的,因为它不能应用表的索引。 推荐方案:用NOT EXISTS 方案代替 3、IS NULL 或IS NOT NULL操作(判断字段是否为空) 判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。 推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。 4、> 及 < 操作符(大于或小于操作符) 大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。 5、LIKE操作符 LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。 一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。 6、UNION操作符 UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如: select * from gc_dfys union select * from ls_jg_dfys 这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。 推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。 select * from gc_dfys union all select * from ls_jg_dfys 二、SQL书写的影响 1、同一功能同一性能不同写法SQL的影响。 如一个SQL在A程序员写的为  Select * from zl_yhjbqk B程序员写的为 Select * from dlyx.zl_yhjbqk(带表所有者的前缀) C程序员写的为 Select * from DLYX.ZLYHJBQK(大写表名) D程序员写的为 Select *  […]

龙生   16 Sep 2017
View Details

Python入门指南

一.Windows7下的Python环境搭建 1.Google下载python-2.6.msi安装包,以管理员身份运行,安装时候注意不要在有中文目录的程序下安装。安装完成之后可以在开始菜单中看到。 2.配置环境变量。不用配置也可以,不过配置之后后面会方便很多。 配置方法:右键“我的电脑”选择“属性”,切换到“高级”选项卡,选择环境变量,在“系统变量”下选择“Path”变量,然后点击“编辑”按钮,添加Python安装目录。配置完成之后可以打开cmd输入”python”进行测试。如果出现下图所示,则表示配置成功。此步骤熟悉Java的同学应该比较熟悉。        二.Python基础语法   关于Python 的基础教程网上有很多,我的看的电子书。 推荐《Python核心编程(第二版)》,大家可以去电驴下载电子版。Python是弱类型语言,对Javascript比较熟悉同学学起来应该会快一点。有人说Python不需要学习,不过我认为一些基本的API的使用还是要记得的。 这里给出一个地址:http://www.verycd.com/topics/2765155/   三.Python 开发环境   如果觉得Python自带的IDE用着很不爽的下,有下面3个自认为比较好的第三方开发环境。 如果你是.NET开发人员用的是Visual Studio 2010或者更高版本的话,那么你可以http://pytools.codeplex.com/ 下载Python Tools for Visual Studio,然后进行安装即          可。 如果你是Java开发人员用的是Eclipse的话,那么你可以参考http://www.rose-hulman.edu/class/csse/resources/Eclipse/eclipse-python-configuration.htm这里进行Eclipse环境的搭建。 如果你想开发GUI程序的话,那么你可以Google下载boa-constructor-0.6.1.src.win32.exe 和 wxPython2.8-win32-unicode-2.8.12.1-py26.exe 这两个拓展包,前者为GUI拓展包,后者对前者提供了界面操作的支持。 如果你想开发能在没有Python环境上运行Windows GUI程序,那么你需要以下工具。 Python打包工具。Python打包工具有很多种,常用的有Pyinstaller,py2exe等,具体可以Google。后面具体介绍Py2exe的使用。 Python扩展包。Python有非常多的开源扩展包以及强大的扩展能力,一般网络编程,WEB编程,客户端编程 等 你都可以在网上找到非常丰富的资源。下面给出了一些: http://www.itlong.com/thread-1685-1-1.html   from:http://www.cnblogs.com/savorboard/archive/2012/12/30/2839981.html

龙生   16 Sep 2017
View Details
1 224 225 226 432