DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端


最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序。很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗?
当时我是这样回答的,我只能保证DIOCP底层通信的稳定。

说实话,服务端要稳定,并不容易,写过服务端的程序员都清楚。特别是这种可以直接操作指针,自己分配内存和释放内存的语言(想C++, C,
Delphi),一不小心就一个坑,一个坑可能就会引发,内存的释放越界,访问非法地址。导致整个进程的直接奔溃。


经过一些研究和咨询,我可以利用多进程来实现通信层和逻辑层的彻底独立,还可以将逻辑层分布到局域网的其他电脑,进行逻辑的分布式。通讯层单独的做数据转发,即使逻辑层,一不小心奔溃,还可以投递到另外的逻辑处理服务进程,
多进程直接使用socket(0MQ)进行通信。这样大家可以专注于逻辑进程的编写,甚至可以单个逻辑进程采用单线程的方式编写,这样就可以避免多线程代理的居多麻烦,然后用0MQ投递到通讯层进行数据的返回。

草图如下:

DEMO代码正在编写中,请关注DIOCP项目。

>>>>>>DIOCP讨论群:320641073

>>>>>>SVN源码和DEMO下载:https://code.google.com/p/diocp/

时间: 05-22

DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端的相关文章

DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了

[概述] 自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定.这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效.今天特意写篇blog来记录我的心得与大家分享. [功能实现说明] 沿用上次的草图 目前DEMO图上的功能都已经实现.下面谈谈各部分的实现. 通信服务, 由DIOCP实现,担当与客户端的通信工作

DIOCP开源项目-DIOCP3的重生和稳定版本发布

DIOCP3的重生 从开始写DIOCP到现在已经有一年多的时间了,最近两个月以来一直有个想法做个 30 * 24 稳定的企业服务端架构,让程序员专注于逻辑实现就好.虽然DIOCP到现在通讯层已经很稳定了,但是要做如果做这种架构,发现还有诸多不便.于是,有了重写DIOCP的想法. 关于开源服务器的选用: 前段时间大部分代码已经编写完成,于是需要给diocp3安个家,google显然不行了,老是被墙.然后准备选用http://sourceforge.net/,发现我的qq email老是收不到验证邮

DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题

该DEMO演示,如何在客户端与服务端之间直接传递TStream对象,让你专注于处理数据逻辑,可以忽略处理网络传输间粘包的问题. 上面由服务端向所有的客户端推送一个消息TMemoryStream对象(该对象为字符串数据). 代码解释: procedure TfrmMain.actPushMsgExecute(Sender: TObject); var lvList:TList; i: Integer; lvStream:TMemoryStream; s:AnsiString; begin lvLi

DIOCP开源项目-DIOCP3重写笔记-1

这几天在在重新DIOCP3,基本工作已经初步完成,进入测试阶段,今天加入排队投递,本认为是个很简单的工作,稍微不注意,留了两个坑,调了7,8个小时,刚刚总算找到问题,记录一下, 关于排队投递的流程 这是投递一个TIocpSendRequest的流程,投递开始,投递一块数据,最大50K,如果超过50K则分批进行投递.流程是没错,我刚开始的写法是: 其中InnerPostRequest是投递发送数据到iocp队列中去,投递完成后然后增加内存块的Postion,以便于下次继续投递.看上去貌似没什么问题

DIOCP开源项目-DIOCP3的LoadRunner11测试报告

昨天有个多年的群友(B3.Locet)用LoadRunner11对DIOCP3做压力测试,说测试的时候出现了大量的10053,10054的报告.昨天晚上下载了个LoadRunner11, 今天捣鼓了下.没用过这么高级的东西, LoadRunner是专业的测试工具,用来测试DIOCP3 Echo测试服务器,是用socket协议进行测试 脚本写的很简单,每次发送101次数据,然后关闭连接. 在运行的时候模拟1000个用户运行,可以选择连续执行,或者只运行一次.经过测试发现,报告上面出现大量的1005

DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>

首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉. 以下是测试的结果,从服务器下载传输了一个3G左右的文件(Win7.iso).传输后用Hash工具做了个测试,是一样的.后面贴出了两个文件的贴图. 下面是客户端接受到文件的hash截图 下面是服务端源文件的hash截图 协议和功能 该DEMO由客户端请求服务端位与Files下面的文件,第一次请求文件信息(文件大小),请求到文件后,请求下载文件数据,收

DIOCP开源项目-DIOCP3的ECHO测试<贴图>

星期六开了测试台测试机子.星期天休息,今天早上来接两个图 开了2个客户端,一个qsl的echo client,一个是楠楠的dbiocp回调客户端.建立13240个连接 今天来后,机子很卡,后来发现是楠楠的dbiocp导致的.难怪,速率才14M /s,刚1个小时能达到 90M/S,关掉后,和qsl的客户端继续很正常. 唯一的缺陷是,Integer溢出了,导致统计数据出现了负数.qsl的客户端一样也是这个问题,实际使用倒是可以忽略. 内存占用<设定的WSARecv的内存块大小为1024>,内存占用

开源分布式游戏服务端引擎kbengine

服务端引擎: http://www.kbengine.org 什么是KBEngine? 一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术, 将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏. (经常被问到承

【DIOCP开源项目】实际应用案例

案例1 DIOCP是Delphi下进行IOCP服务端通讯开发的一个非常好的开源框架,稳定.高效并且使用起来十分简单. 自己两个多月之前因为需要使用Delphi开发一个TCP服务端,当时也是到处爬文,希望找到一个稳定且好用的IOCP开源框架,整整一周的时间,看了很多,也对比了很多,最后选择了DIOCP,现在服务器端正式版本已经上线运行了36天的时间了,所有运行一切稳定,无论是CPU占用.内存使用还是通信稳定性,DIOCP的表现真的没有让我失望,表现得非常优秀. 服务器环境:   OS:Window