易截截图软件、单文件、免安装、纯绿色、仅160KB

Delphi编写系统服务七:完成端口演示 收藏

Delphi编写系统服务七:完成端口演示 收藏
 在开发大量Socket并发服务器,完成端口加重叠I/O是迄今为止最好的一种解决方案,下面是简单的介绍:
   “完成端口”模型是迄今为止最为复杂的一种I/O模型,特别适合需要同时管理为数众多的套接字,采用这种模型,往往可以达到最佳的系统性能。但是只适合Windows NT和Windows 2000及以上操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千套接字的时候,而且希望随着系统内安装的CPU数量增多,应用程序的性能也可以线性提升,才考虑采用“完成端口”模型。
    重叠I/O(Overlapped I/O)模型使应用程序达到更佳的系统性能。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据结构,一次投递一个或多个Winsock I/O请求。针对哪些提交的请求,在它们完成之后,应用程序可为它们提供服务。该模型适用于除Windows CE之外的各种Windows平台。
    开发完成端口最具有挑战是线程个数和管理内存,创建一个完成端口后,就需要创建一个或多个“工作者线程”,以便在I/O请求投递给完成端口对象后,为完成端口提供服务。但是到底应创建多少个线程,这实际正是完成端口最为复杂的一个方面,一般采用的是为每一个CPU分配一个线程(有的是CPU个数加1,有的是CPU*2的线程个数)。内存分配效率低是因为应用程序在分配内存的时候,系统内核需要不停的Lock/UnLock,而且在多CPU的情况下,会成为整个程序性能的瓶颈,不能随CPU的个数增加而性能提高,一种比较好的做法一个一次分配多块内存。
    下面是我写一个的完成端口的演示程序,在我的电脑上测试可以达到链接5100个客服端,服务器性能还很好,由于我写的客服端占用资源比较的,最后直接重启了,具体见代码。演示程序主要的瓶颈在于发消息的这一块,在实际应用中应去掉。
(配置:操作系统 Microsoft Windows XP Professional 操作系统 Service Pack 版本 Service Pack 2;CPU:Intel(R) Pentium(R)4 2.40GHz 2.40GHz;内存:2G;主板:华硕P4P800)。
主要源代码:(Delphi 7编写),下载地址:http://download.csdn.net/source/818039
{*******************************************************}
{                     


相关文档:

C#学习及与delphi的比较(一)

刚开始很不习惯c#的风格,哎,先入为主啊,delphi习惯了,{}代替begin/end太扎眼。
属性方法的宣告和代码在一起,没有像delphi分interface/implementation,感觉太乱,都不知道一个class到底有几个方法。
每个属性和方法前面都要单独写private/protected/public,老天,c#是delphi之父设计的揶,怎么不学delphi写一个就行 ......

上位机完工 ——delphi 告一段落

全图

保存数据为txt文档

保存为图像

打印——pdf打印机
 
下一步 有时间的话 实现 标签页面   USB转串口自动识别设备  //重新回到STM32上面-02-26  21:35:21
......

终于用上破解的Delphi 2010

虽然用盗版是件很不光彩的事情,但是这个软件目前实在是买不起.呵,折磨了数月,而今天却不经意间成功了. 实在是难掩心中快感.
这所谓的破解过程相当简单
百度搜索一下
Delphi.Distiller.v1.85
解压后运行,点到DELPHI2010页面,>Tweat>再勾上Remove Delphi 2010 Updata....,再点击Clear All Embarcadero...
接着就OK ......

WSAAsyncSelect模型Delphi简单实现


TCP连接建立与关闭
相信各位读者现在对於 Winsock 的定义、系统环境,以及一些 Winsock Stack及 Winsock 应用程式,都有基本的认识了。接下来笔者希望能分几期为各位读者介绍一下简单的 Winsock 网路应用程式设计。我们将以 Winsock 1.1 规格所定义的 46 个应用程式介面(API)为基础,逐步来建立一对 TCP socket 主从架 ......

Delphi下POS机控制钱箱,客显,打印机,小票打印

1、控制POS机的客户显示屏
procedure TFrmMain.ShowMoney(Money_Port:   String;Money_String:String);
//Moneey_Port     顾显接口Com1   or   Com2     Money_String     顾显显示的内容
var
    PrnFile ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号