最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序.很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗? 当时我是这样回答的,我只能保证DIOCP底层通信的稳定. 说实话,服务端要稳定,并不容易,写过服务端的程序员都清楚.特别是这种可以直接操作指针,自己分配内存和释放内存的语言(想C++, C, Delphi),一不小心就一个坑,一个坑可能就会引发,内存的释放越界,访问非法地址.导致整个进程的直接奔溃. 经过一些研究和咨询,我可以利用多进程来实现通信层和逻辑层的彻…
[概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效.今天特意写篇blog来记录我的心得与大家分享. [功能实现说明] 沿用上次的草图 目前DEMO图上的功能都已经实现.下面谈谈各部分的实现. 通信服务, 由DIOCP实现,担当与客户端的通信工作…
DIOCP3的重生 从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好.虽然DIOCP到现在通讯层已经很稳定了,但是要做如果做这种架构,发现还有诸多不便.于是,有了重写DIOCP的想法. 关于开源服务器的选用: 前段时间大部分代码已经编写完成,于是需要给diocp3安个家,google显然不行了,老是被墙.然后准备选用http://sourceforge.net/,发现我的qq email老是收不到验证邮…
案例1 DIOCP是Delphi下进行IOCP服务端通讯开发的一个非常好的开源框架,稳定.高效并且使用起来十分简单. 自己两个多月之前因为需要使用Delphi开发一个TCP服务端,当时也是到处爬文,希望找到一个稳定且好用的IOCP开源框架,整整一周的时间,看了很多,也对比了很多,最后选择了DIOCP,现在服务器端正式版本已经上线运行了36天的时间了,所有运行一切稳定,无论是CPU占用.内存使用还是通信稳定性,DIOCP的表现真的没有让我失望,表现得非常优秀. 服务器环境:   OS:Window…
印象中网络程序都是sendBuffer和recvBuffer来发送数据和接收数据,本次Demo演示如何定义定义一个自己的对象,然后我们按照OO的思想直接进行对象的发送和接收,先上个流程图. 下面是客户端发送和接收的测试代码. 下面我们来看看详细的设计. 第一步(TMyObject):首先我们需要设计一个需要进行传输的对象. type   TMyObject = class(TObject)   private     FDataString:String;     FOle:OleVariant…
昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告.昨天晚上下载了个LoadRunner11, 今天捣鼓了下.没用过这么高级的东西, LoadRunner是专业的测试工具,用来测试DIOCP3 Echo测试服务器,是用socket协议进行测试 脚本写的很简单,每次发送101次数据,然后关闭连接. 在运行的时候模拟1000个用户运行,可以选择连续执行,或者只运行一次.经过测试发现,报告上面出现大量的1005…
首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉. 以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso).传输后用Hash工具做了个测试,是一样的.后面贴出了两个文件的贴图. 下面是客户端接受到文件的hash截图 下面是服务端源文件的hash截图 协议和功能 该DEMO由客户端请求服务端位与Files下面的文件,第一次请求文件信息(文件大小),请求到文件后,请求下载文件数据,收…
该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题. 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据). 代码解释: procedure TfrmMain.actPushMsgExecute(Sender: TObject); var lvList:TList; i: Integer; lvStream:TMemoryStream; s:AnsiString; begin lvLi…
很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新的代码和Demo. 好了我带大家看看这次的DEMO,经过群里面朋友们的推荐,这次代码中引用了UntCobblerUniPool连接池代码来完成的本次的DEMO,研究了下代码,里面使用的线程时钟来做死连和多余连接的释放.感谢UntCobblerUniPool作者无私奉献的精神. 先截个图,看看服务端的…
GIL全局解释器锁 ''' python解释器: - Cpython C语言 - Jpython java ... 1.GIL: 全局解释器锁 - 翻译: 在同一个进程下开启的多线程,同一时刻只能有一个线程执行,因为Cpython的内存管理不是线程安全. - GIL全局解释器锁,本质上就是一把互斥锁,保证数据安全. 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nati…