随笔分类 -  Delphi-IOCP

摘要:前几天有个朋友,说他们公司做手游,服务端用的DIOCP3里面做文件服务器,客户端用cocos-x,在调试与diocp通信时老是失败!于是,我下载了一个Codeblocks经过几个小时的折腾,终于折腾出来了,把其中的一些心酸记录下,以便以后查阅。1.windows下面使用socket的一些函数时,需要... 阅读全文
posted @ 2015-03-05 23:48 D10.天地弦 阅读(1393) 评论(0) 推荐(2) 编辑
摘要:DIOCP3除了有详细的监控面板之外,还有详细的输出日志,当然需要打开日志编译开关! 在工程选项加入DEBUG编译指令,这样在运行中就可以看到DIOCP3的运行详细日志 日志输出在EXE相同目录的LOG文件夹下面。 日志说明: 8276_iocpSVR_2015010712.log 8276 是进程ID iocpSVR是程序中iocpTcpSERVER的名字 2... 阅读全文
posted @ 2015-01-07 12:43 D10.天地弦 阅读(817) 评论(2) 推荐(0) 编辑
摘要:案例1DIOCP是Delphi下进行IOCP服务端通讯开发的一个非常好的开源框架,稳定、高效并且使用起来十分简单。 自己两个多月之前因为需要使用Delphi开发一个TCP服务端,当时也是到处爬文,希望找到一个稳定且好用的IOCP开源框架,整整一周的时间,看了很多,也对比了很多,最后选择了DIOCP,... 阅读全文
posted @ 2014-12-16 09:15 D10.天地弦 阅读(1815) 评论(0) 推荐(1) 编辑
摘要:由于360改变了共享策略,导致之前的共享连接不能使用重新共享了下。http://yunpan.cn/cgS2DBRT572jy(提取码:1eda) 阅读全文
posted @ 2014-10-04 19:20 D10.天地弦 阅读(835) 评论(0) 推荐(0) 编辑
摘要:服务器的连接上限是到底是多少?diocp3开源项目的一个装13测试(8W连接数)测试DEMO路径diocp3\samples\ECHO之前群里说一台服务器最多是High(Word)的连接数65535,当时我看了下socket的类型是u_long,并不是word,虽然不用那么多连接数,虽然当时润哥做过... 阅读全文
posted @ 2014-09-29 11:26 D10.天地弦 阅读(1887) 评论(0) 推荐(0) 编辑
摘要:【说明】这个例子答应大家很久了,一直没有时间弄,现在正式结合MyBean插件可以很方便的在客户端共享操作连接,执行数据库的各项工作,屏蔽了底层的通信解码器编码等工作,直接传递Variant,给了开发者足够的领活和自由。【服务端使用技术】diocp3:担当底层的通信任务。qworker/iocpTas... 阅读全文
posted @ 2014-09-05 11:52 D10.天地弦 阅读(4035) 评论(6) 推荐(0) 编辑
摘要:socket-Coder\DataModuleDEMO\ 本DEMO演示数据库的简单使用,其他功能需要自己扩展。 将工程的输出路径设置到socket-Coder\DataModuleDEMO\BIN下面 服务端使用的Access数据库 可以改连接使用其他数据库 DataModuleDEMO\BIN\diocp3Server.db.ini 阅读全文
posted @ 2014-08-26 00:01 D10.天地弦 阅读(807) 评论(0) 推荐(0) 编辑
摘要:DIOCP3兼容DIOCP1的,有些属性做了修改 DIOCP3, uIOCPConsole没有了, uMemPool没有了 1.DIOCP1,代码: DIOCP3中去掉TIOCPContextFactory, 可以直接往TIocpConsole(uIocpCentre单元中)对象上注册。TiocpConsole有对应的方法 这样可以每个TIocpConsole有自己独立的编码和解... 阅读全文
posted @ 2014-08-25 21:58 D10.天地弦 阅读(803) 评论(0) 推荐(0) 编辑
摘要:TIOCPConsole是继承至TIocpTcpServer,做了管理和调用编码和解码器器的功能。可以通过向他注册编码和解码器可以忽略粘包的问题。 这样如果TIOCPConsole客户端必须按照一定的编码器和解码器的协议发送数据和接受数据, diocpCoders中已经有了几种编码和解码器, 比较常用的TDIOCPStreamCoder 他的格式是Pack_Flag + stream... 阅读全文
posted @ 2014-08-25 16:32 D10.天地弦 阅读(1035) 评论(0) 推荐(0) 编辑
摘要:什么是粘包: 第一次发送 12345, 第二次发送abcde, 底层socket可能会一次性进行发送12345abcde,或者对方可能一次性进行了接收,那接收的时候,你可能想分两次接收才对,第一次接受到12345, 第二次想接收abcde,但是事与愿违,一次就接收完了,这就是粘包的问题。需要自己处理, 怎么样处理粘包: 常见的方法是在包数据的前面加长度比如我先发送一个字节代... 阅读全文
posted @ 2014-08-25 14:27 D10.天地弦 阅读(943) 评论(1) 推荐(0) 编辑
摘要:DIOCP3支持两种方式接收数据, 第一种是原始的流数据, 最通用的一种方式,客户端发啥,这边就收到啥。需要自己处理粘包问题。 可以在TCilentContext或者TIocpTcpServer的OnRecvBuffer中处理, 如果Errcode = 0可以进行收到数据的处理 下面这两个都会触发 TIocpClientContext procedure OnRecvBuffer(... 阅读全文
posted @ 2014-08-25 14:13 D10.天地弦 阅读(973) 评论(0) 推荐(0) 编辑
摘要:昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告。昨天晚上下载了个LoadRunner11, 今天捣鼓了下。没用过这么高级的东西,LoadRunner是专业的测试工具,用来测试DIOCP3 Echo测试服务... 阅读全文
posted @ 2014-08-12 12:32 D10.天地弦 阅读(1953) 评论(0) 推荐(0) 编辑
摘要:首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉。以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso)。传输后用Hash工具做了个测试,是一样的。后面贴出了两个文件的贴图。下面是客... 阅读全文
posted @ 2014-08-10 20:31 D10.天地弦 阅读(3876) 评论(3) 推荐(3) 编辑
摘要:该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题。上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据)。代码解释:procedure TfrmMain.actPushMsgExecute... 阅读全文
posted @ 2014-08-05 23:25 D10.天地弦 阅读(1823) 评论(0) 推荐(1) 编辑
摘要:DIOCP3的重生从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好。虽然DIOCP到现在通讯层已经很稳定了,但是要做如果做这种架构,发现还有诸多不便。于是,有了重写DIOCP的想法。关于开源服务器的选用:前... 阅读全文
posted @ 2014-08-03 23:47 D10.天地弦 阅读(7507) 评论(4) 推荐(4) 编辑
摘要:这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这是投递一个TIocpSendRequest的流程,投递开始,投递一块数据,最大50K,如果超过50K则分批进行投递。流程是没错,我刚开始的写法是: 其中InnerPostRequest是... 阅读全文
posted @ 2014-08-01 00:20 D10.天地弦 阅读(851) 评论(0) 推荐(0) 编辑
摘要:[概述]自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定。这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和... 阅读全文
posted @ 2014-05-28 23:24 D10.天地弦 阅读(10524) 评论(13) 推荐(4) 编辑
摘要:3个逻辑处理进程 + DIOCP通信服务器(5K连接) + 5个客户端 运行半个小时,无丢包,数据完整 群内无毒公主 10K连接 , 逻辑处理进程未知 50分钟,所有客户端关闭 阅读全文
posted @ 2014-05-28 00:51 D10.天地弦 阅读(1200) 评论(0) 推荐(0) 编辑
摘要:最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序。很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗? 当时我是这样回答的,我只能保证DIOCP底层通信的稳定。说实话,服务端要稳定,并不容易,写过服务端的程序员都清楚。特别是这种可以直接操作指针,自己分配内存和释放内... 阅读全文
posted @ 2014-05-25 09:11 D10.天地弦 阅读(3721) 评论(1) 推荐(3) 编辑
摘要:最近想在DIOCP中加入任务调度线程,DIOCP的工作线程作为生产者(producer)将接受到的数据对象,投递到任务调度线程中,然后统一进行分配。然而这一切都需要一个队列, 这几天都在关注无锁队列。[队列]首先是一个队列,简单的队列就是,生产者把数据压入队列(push), 消费者通过队列Pop出数... 阅读全文
posted @ 2014-05-11 22:04 D10.天地弦 阅读(7438) 评论(5) 推荐(3) 编辑