|
|
导航: |
论坛 -> 网络通讯
斑竹:liumazi,sephil |
|
作者: |
|
2014/11/2 14:56:36 |
标题: |
【DIOCP开源项目】-DIOCP的更新日志和进展 |
浏览:6163 |
|
加入我的收藏 |
楼主: |
DIOCP项目本人从学习iocp知识的同时慢慢形成的一个高并发类库。
DIOCP1把IOCP和Socket混在一起,成为应用在服务端的网络类库,经过了一些应用后发现底层设计上面存在一些瓶颈。不过从应用和项目上面看,还较为稳定。
今年我准备利用diocp做些商业应用,于是重写了跳过了版本2,直接从版本3开始。
IOCP引擎 iocpEngine.pas 用于驱动各种iocp的应用,只包含了简单的Iocp队列和工作线程 Socket的应用: 包括iocpTcpServer,和iocpClientSocket, 然后在IocpTcpServer基础上面做了编码器和解码器的封装,可以直接注册编码和解码类, 可以用于兼容DIOCP1的项目 线程池任务应用: iocpTask,基于iocp的线程池,用于任务的投递和处理。 其他基础类 : BaseQueue, SafeLogger, DHashTable, SimpleMsgPack diocp3很多思路都来自网友的建议和qdac项目。感谢他们。
在盒子开帖,记录diocp的升级日志,敬请关注,如果在应用中发现bug,欢迎提交!
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/ |
作者: |
|
2014/11/2 14:58:03 |
1楼: |
DIOCP 3.5.02 发布 2014-11-02 14:57:55, 做了以下改进和优化。
1.修复DHashTable中计算数组位置时可能出现负数,而导致访问违规错误(2014-10-20 14:18:43)
2.在AcceptEx出现异常后,销毁Socket句柄,以免下次重用时出现相同的错误。
3.响应完成后TIocpRecvRequest.HandleResponse, 先判断是否需要再次投递RecvRequest,然后再减少Context的引用计算器。避免该Context进行返回到连接池后,又进行借出。导致在后面再进行操作时对应的Context不对应
4.添加TIocpCoderClient组件,客户端应用,可以对单个客户端连接注册解码器和编码器,可以连接多个服务器,统一由同一个iocp引擎进行管理。 DEMO位与:samples\socket-Coder\diocpPusher\Client - IocpCoderClient 2014-10-23 12:53:07
5.编码器/解码器模式,在连接上下文关闭时,清理已经接收数据,以免上下文对象再次使用时,出现解码错误。感谢(夢難留? 278010908)反馈bug 2014-10-31 22:09:43
6.优化了PostSendRequest流程
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/2 15:59:40 |
2楼: |
感谢楼主无私奉献,下个项目准备应用上,希望楼主能把移动开发也加上,我等菜鸟就有福了
----------------------------------------------
-
|
作者: |
|
2014/11/2 18:54:28 |
3楼: |
牛
----------------------------------------------
-
|
作者: |
|
2014/11/2 20:46:04 |
4楼: |
太棒了
----------------------------------------------
-
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/2 23:36:00 |
5楼: |
共勉
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
yijun (yijun) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/3 8:21:24 |
6楼: |
中国多一些lz这样的朋友就好了,争取有项目可以用上!
----------------------------------------------
-
|
作者: |
|
2014/11/3 8:33:20 |
7楼: |
来支持一下。。。。
----------------------------------------------
-
|
作者: |
|
2014/11/3 8:53:36 |
8楼: |
来支持一下
----------------------------------------------
-
|
作者: |
|
2014/11/3 9:11:32 |
9楼: |
感谢大家关注
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/3 10:12:59 |
10楼: |
支持一下
----------------------------------------------
-
|
作者: |
glwang (glwang) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/3 10:36:12 |
11楼: |
等待楼主支持安卓移动端的开发..........
----------------------------------------------
|
作者: |
|
2014/11/3 14:21:45 |
12楼: |
必须技持,顶一个。
----------------------------------------------
-
|
作者: |
kkyy (kkyy) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/3 16:18:32 |
13楼: |
HP-Socket据说也是个基于iocp的项目,可参考一下,
----------------------------------------------
-
|
作者: |
|
2014/11/4 0:14:38 |
14楼: |
DIOCP 3.5.02 1.TIOCPBaseSocket(客户端IOCP连接上下文),在关闭后,再一次进行关闭时包Assert异常) :修复了重复调用客户端关闭的问题 2014-11-03 23:06:58
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/4 9:20:49 |
15楼: |
支持!!
----------------------------------------------
-
|
作者: |
|
2014/11/4 10:42:07 |
16楼: |
支持楼主!!!
----------------------------------------------
-
|
作者: |
|
2014/11/4 10:58:35 |
17楼: |
感谢楼主辛苦劳动和无私奉献,在大家都在到delphi的时候,还能这么坚持,佩服。
----------------------------------------------
-
|
作者: |
ctx (ctx) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/5 14:19:19 |
18楼: |
楼主:在哪里能下载!让我学习一下!
----------------------------------------------
-
|
作者: |
|
2014/11/5 15:37:24 |
19楼: |
==========MyBean开源项目==========
客户端插件框架
https://git.oschina.net/ymofen/delphi-framework-MyBean
==========
==========DIOCP开源项目==========
DIOCP3开源项目
https://github.com/ymofen/diocp3
DIOCP1
源码:
https://git.oschina.net/ymofen/DIOCP DEMO:
https://git.oschina.net/ymofen/diocp-samples
DEMO当中大家就会看到,只需要在uClientContext单元的dataReceived方法中加入自己的整个业务逻辑层就可以了,DEMO中还配有客户端的例子,很完整。
==========
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/9 23:06:42 |
20楼: |
DIOCP 3.5.02 2014-11-02 00:25:41
1.TIOCPBaseSocket(客户端IOCP连接上下文),在关闭后,再一次进行关闭时包Assert异常) :修复了重复调用客户端关闭的问题 2014-11-03 23:06:58
2.添加DRawSocket.pas,可以用于跨平台 2014年11月6日 22:39:14
3.添加DTcpClient.pas, 可以用于跨平台 2014年11月6日 22:39:39
4.TDTcpClientCoderImpl实现了ICodeSocket接口,可以用与跨平台 2014年11月6日 22:45:54
5.添加客户端添加Andriod使用的DEMO[samples\socket-Coder\DataModuleDEMO-Andriod] 2014-11-09 17:09:30
6.在响应WSARecv处理中(TIocpRecvRequest.HandleResponse)最后记录日志时, 在继续投递了WSARecv之后访问了对象的全局字符串变量可能会造成记录状态时出现访问冲突。 在投递之前用过程的局部变量进行记录, 然后再投递WSARecv。记录状态日志时使用过程的局部变量 2014-11-09 22:41:57
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
jmhyy (jmhyy) |
★☆☆☆☆ |
-
|
普通会员 |
|
2014/11/10 12:00:27 |
21楼: |
赞
----------------------------------------------
-
|
作者: |
|
2014/11/10 23:22:04 |
22楼: |
很有理想
----------------------------------------------
长兴波波
|
作者: |
|
2014/11/11 10:52:41 |
23楼: |
MyBean貌似不能跨平台,建议做成跨平台版
----------------------------------------------
-
|
作者: |
|
2014/11/11 11:47:27 |
24楼: |
好东西一起完善,但不要完善后就收费, 那样就。。。。。。
----------------------------------------------
-
|
作者: |
|
2014/11/11 15:00:44 |
25楼: |
DIOCP一直会开源下去。
我会考虑基于DIOCP做些商业应用的服务端产品,商业应用需要有个健壮的通信底层,这个底层会基于DIOCP开源项目。
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
glwang (glwang) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/11/12 17:01:15 |
26楼: |
顶楼主!DIOCP3的安卓DATADEMO用XE7编译,在MOTO MT887运行正常。希望能支持firedac.
----------------------------------------------
|
作者: |
|
2014/11/12 17:07:51 |
27楼: |
FireDAC和diocp应该不冲突,你该什么时候使用,就什么时候使用
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/12 22:57:40 |
28楼: |
还是顶楼主的。。。。~有一颗乐于分享的心~
给我们这么新心一些帮助。。。~
----------------------------------------------
-
|
作者: |
|
2014/11/13 21:26:13 |
29楼: |
顶楼主 支持分享
----------------------------------------------
-
|
作者: |
|
2014/11/14 12:22:02 |
30楼: |
DIOCP 3.5.03 2014-11-11 22:31:23
1.DRawSocket 添加GetIpByName跨平台的解析域名到IP地址的函数。 2014-11-11 12:32:48 2.优化发送数据发送TIocpSendRequest发送流程。 1>去掉FCanGiveBack属性。 2>增加引用计数,在WSASend +1, 在ResponseDone时 -1 如果=0时 换回对象池。 3>添加OnResponseCompletedDone虚函数,在TIocpSendRequest还回对象池之前进行调用。 *TIocpSendRequest可以推送大于WSASendBlockSize的数据,推送时会一块块进行推送,在响应完成时会进行下一块数据的推送<下一块的投递可能得到第二个线程的立即执行> 2014-11-11 22:50:48 3.进一步精简发送流程。 1>去掉底层的TIocpSendRequest分包方案,上一层一次性投递多少就发送多少数据 2>PostWSASendBuffer添加参数SendBufferReleaseType,可以决定投递完成的Buffer处理方式。 2014-11-11 23:57:35
4.添加文件服务器DEMO。客户端基于MyBean插件。可以直接使用 2014-11-12 13:07:29
5.同步iocpBaseSocket.TIocpSendRequest的发送流程和IocpTcpServer.TIocpSendRequest一致 2014-11-12 23:05:17
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/11/18 19:09:03 |
31楼: |
6.优化关闭过程,触发完所有的事件后,然后再移除在线列表,然后归还到连接上下文池。 2014-11-17 23:51:43 7.停止TcpServer如果超时后,记录当前信息统计信息到文件, 以便查看日志进行分析。 2014-11-17 23:52:42 8.优化DataModuleDB DEMO,关闭窗体时,停止Iocp服务并断开所有客户端, 如果在主窗体释放时停止Iocp服务,在断开客户端连接释放TMyClientContext实例FdmMain.Free时卡死 2014-11-17 23:56:39
9.修复DTcpClient在Posix下Socket错误时返回0,导致RecvBuffer死循环(感谢[广州]cyw反馈bug) 2014-11-18 10:39:22
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/12/8 19:23:34 |
37楼: |
@nladenadel 可否把你的回帖删除掉?
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/12/8 19:24:09 |
38楼: |
DIOCP 3.5.04 2014-12-07 21:54:11
1.编码层的0Copy发送数据,改造 2014-12-06 12:02:18 1.压入 TBufferLink队列 2.检测是否真正发送,如果没有进入开始发送 3.提取一块进行PostWSASendBuffer。提取失败标志发送标志为False。退出 4.在发送完成事件中,重复到第三步 结合不得闲意见进行整合修改
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/12/15 17:20:14 |
39楼: |
楼主能否搞个web服务端出来?使用面会更广。
----------------------------------------------
虽千万人吾往矣!
|
作者: |
|
2014/12/15 21:00:16 |
40楼: |
虽然我不懂这个是什么,但就为了楼主的这份心,我也顶一下。
----------------------------------------------
-
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/12/15 21:50:40 |
41楼: |
楼主的iocp已有tcpserver,只需在上面加上http协议解析就成httpserver了,楼上的楼上可以试试。
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
|
2015/2/5 10:52:04 |
42楼: |
可以同时支持tcp和udp吗?
----------------------------------------------
-
|
作者: |
|
2015/2/5 13:46:09 |
43楼: |
UDP暂时不支持 Http正在折腾中,已经初步支持
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
topok (topok) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2015/2/10 14:18:12 |
44楼: |
请问为什么在接收过程中,不能调用CreateOleObjcet创建对象,或者调用创建好的对象,哪位高手指点一下? 例如下面不能执行。 procedure TMyClientContext.dataReceived(const pvObject: TObject); var aClass3: Variant; begin aClass3:=CreateOleObject('Excel.Application'); end;
在TMyClientContext.Create过程中能够运行CreateOleObject创建对象,也能执行创建的对象
----------------------------------------------
-
|
作者: |
|
2015/11/30 14:52:08 |
45楼: |
牛B。开源不?
----------------------------------------------
-
|
|