
DELPHI完成端口开发
文章平均质量分 76
SQLDebug_Fan
05年开始编程,刚开始做财务软件,现从事Windows服务端程序开发,对于SOCKET多线程并发同步异步SQLServer性能条件遇到问题较多,现在开始学习C服务端开发和性能计数器调校
展开
-
DELPHI高性能大容量SOCKET并发(十):IOCP完成端口性能优化
IOCP性能优化主要是集中在每个处理接收数据和发送数据的对象锁,如果能降低锁的调用次数和提高锁的效率,对IOCP的整理效率和吞吐量都非常有帮助。有很多开发人员在优化IOCP的时候,对于如何提高锁的效率,有使用原子操作来加锁,这样做的效率比较调用Windows的锁效率,因而吞吐率也更高。我们不讨论提高锁的效率,我们这次的优化是降低锁的调用次数。服务端优化IOCP是异步线程通知方式,有原创 2013-06-10 22:22:36 · 9740 阅读 · 9 评论 -
DELPHI高性能大容量SOCKET并发(九):稳定性问题解决
IOCP接收缓存导致的内存错乱在用IOCP控件写了一个ERP服务器后,服务器会发生运行3天后,出现莫名的内存错误,用FastMM检测,是本没有内存错误的地方,而且内存错误出现的地方也不固定。这是一个不可重现的Bug,后续通过打日志把错误范围缩小后发现,每次出现内存错误之前都是由于有链接断开释放,因此就加了日志逐步定位到是TSocketHandle释放引起的,具体原因是:在IOCP中,每个S原创 2013-06-07 22:23:12 · 11447 阅读 · 2 评论 -
DELPHI高性能大容量SOCKET并发(八):断点续传
断点续传断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1;下载开始的时候,由客户端上报本地已经下载大小,服务器根据位置信息下发数据,因此上传下载协议都需要带Size大小,例如我们协议格式。上传开始:客户端->服务器{[Request]Command=UploadDir=Dir原创 2013-06-06 23:38:55 · 5616 阅读 · 0 评论 -
DELPHI高性能大容量SOCKET并发(七):通讯协议
协议种类开发Socket程序有两种协议类型,一种是用文本描述的,类似HTTP协议,定义字符集,好处是兼容性和调试方便,缺点是解析文本会损耗一些性能;一种是用Code加结构体,定义字节顺序,好处是性能高,缺点是兼容性和调试不方便。这个可以根据应用场景灵活选择,如果您的应用相对稳定,需求变化少,性能要求高,则可以使用Code加结构体的方式。如果您的应用需要不停的扩充功能,但是对性能要求不苛刻,原创 2013-06-06 23:15:03 · 6581 阅读 · 1 评论 -
DELPHI高性能大容量SOCKET并发(六):协议字符集
UTF-8UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文)。使用UTF-8的好处是现在一些手机平台都是使用UTF-8,另外在一些嵌入式平台,如果不支持中文,只支持英文,可以不转换,UTF-8就可原创 2012-12-18 18:58:08 · 5869 阅读 · 14 评论 -
DELPHI高性能大容量SOCKET并发(五):锁和对象分离
锁和对象一起封装的危险在多线程编写中,绝大多数编码风格喜欢把锁和要访问的对象封装在同一个对象,释放对象的时候也释放锁,这样会造成死锁。我们写一个测试例子,我们创建一个锁,把锁锁住,然后再创建一个线程,一直不停的等待锁返回,然后我们把锁释放,这时线程就死锁,代码如下:定义接口:type TLockObject = class; TLockTestThread = clas原创 2012-09-16 23:35:20 · 6966 阅读 · 0 评论 -
DELPHI高性能大容量SOCKET并发(四):粘包、分包、解包
粘包使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据,造成多个数据包的粘连。如果接收进程不及时接收数据,已收到的数据就放在系统接收缓冲区,用户进程读取数据时就可能同时读到多个数据包。粘原创 2012-09-05 22:51:59 · 10523 阅读 · 0 评论 -
DELPHI高性能大容量SOCKET并发(三):接收、发送、缓存
接收完成端口是结合重叠端口一起使用的,在接收数据之前,我们需要投递一个接收请求,使用function WSARecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD; var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED; lpCompl原创 2012-08-25 21:21:47 · 12428 阅读 · 6 评论 -
DELPHI高性能大容量SOCKET并发(二):IOCP完成端口控件封装
IOCP完成端口介绍:完成端口模型是Windows平台下SOCKET端口模型最为复杂的一种I/O模型。如果一个应用程序需要同时管理为数众多的套接字,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性提升,采用完成端口模型,往往可以达到最佳的系统性能。完成端口可以管理成千上万的连接,长连接传文件可以支持5000个以上,长连接命令交互可以支持20000个以上。这么大并发的连原创 2012-08-19 22:41:09 · 15946 阅读 · 18 评论 -
DELPHI高性能大容量SOCKET并发(一):IOCP完成端口例子介绍
例子主要包括IOCP控件封装、服务端实现、传输协议和日志、控制、SQL查询、上传、下载等协议实现,并包括一些初步的性能测试结果。服务端:界面截图如下:提供服务和桌面方式运行,桌面方式可直接打开程序,方便日常调试,可以使用命令行注册或卸载服务,在CMD中输入D:\DEMO\IOCPDemo\Bin\IOCPDemoSvr.exe -install来注册服务,在CMD输入D:\DE原创 2012-08-18 22:52:23 · 35147 阅读 · 141 评论