[概述]

自从上次发布了[DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端]文章后,得到了很多朋友的支持和肯定。这加大了我的开发动力,经过几个晚上的熬夜,终于在昨天晚上,DEMO基本成型,今天再加入了QWorkers来做逻辑处理进程,进一步使得逻辑处理进程更加方便和高效。今天特意写篇blog来记录我的心得与大家分享。

[功能实现说明]

沿用上次的草图

目前DEMO图上的功能都已经实现。下面谈谈各部分的实现。

  • 通信服务, 由DIOCP实现,担当与客户端的通信工作,负责接收数据包,处理粘包和数据回传的工作
  • 数据分发队列, 由uWorkDispatcher单元实现, 其中利用 OTL中的无锁队列担当数据的缓存,在使用uJobPusher推送队列中的任务。
  • 数据推送,由ZeroMQ完成,使用Push/Pull模式,由于第一次接触ZeroMQ,可能没有挖掘到ZeroMQ的潜力,导致现在进程之间传递都是线程操作,开始一直担心这个问题,迟迟没有下手,最后还是坚持用了,效果还不错。
  • 逻辑处理进程,由主控台程序完成,里面主要收到数据分发队列中分发过来的任务后,进行逻辑处理,然后再将需要返回的数据,推送回通信服务进程(由uJobReceiver单元处理),并投递到DIOCP传输队列,该进程中使用到QWorkers。等一下我专门介绍这个方便的队列任务处理类。
  • 客户端,由TCPClient实现数据的通信。

[QWorkers说明]

之前一直想设计一个这样的东西,几次下来都不如意,自从接触到QWorkers后,发现原来应该这样去设计。下面是我研究QWorkers画的一流程图。一个中午的吃饭的时间,基本上就可以理解80%,作者设计思路明确,使用简单,而且队列使用原子锁,也比使用临界高效不少。作者是QDAC开源项目的发起人。

主要作用,任务(可以单次任务,定时任务(比如每天12:00执行), 延时任务, 手动触发任务)的投递和执行。适合做逻辑运算任务。具体使用可以参考DEMO[DIOCP\Demos\MultiProcessor\processorWithQWorker]

[ZeroMQ]

ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型、连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。ZeroMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间。

推荐大家看两遍blog, 我就不多写了。

ZeroMQ研究与应用分析ttp://www.cnblogs.com/rainbowzc/p/3357594.html

Delphi实战: http://my.oschina.net/zeroflamy/blog/109457

[关于DEMO]

程序使用XE5编译,

服务端(SERVER):DIOCP是支持D7-XE6的,所以Server可以用D7-XE6原理上是可以编译的,只是工程文件是XE5编译的,需要自己稍作处理

客户端(TCPClient): D7-XE6都应该没有问题。使用的标志控件(TcpClient),标准写法.

逻辑处理进程(processor):超级简单的处理进程。D7-XE6

逻辑处理进程(processorWithQWorker):由于使用了QWorkers,只能支持D2007以上的版本.

[关于解决方案的应用]

该框架主要用于ERP的三层框架。逻辑处理进程可以实现热拔插。可以启动多个。自动接收任务。底层稳定,持续几个月的服务端再也不是什么难事了….

后续会结合MyBean框架做一些例子的整合。

欢迎大家继续关注。

最新文章

  1. 在CentOS 7.2下升级gcc编译器的版本
  2. POST方式提交表单时,后台接受实体如果继承了父类,将无法映射表单对应数据
  3. iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
  4. Android 代理服务器为全网提供代理
  5. PHP关闭提示、打印配置
  6. Anddoi 将时间转换为指定时区的时间
  7. S3C2410 ADS实验手册
  8. [转] acmer必看的26个对acm态度
  9. codeforces --- 279C Ladder
  10. C/C++源代码的Include依赖关系图
  11. Application to find the maximum temperature in the weather dataset
  12. POJ 2152 Fire
  13. IAsyncResult 接口异步 和匿名委托
  14. RSA实践指南
  15. Linux查找和筛选工具
  16. NOIP 11.01 应试记录
  17. winform中的数据绑定
  18. iOS学习笔记--触摸事件
  19. Python初学者必看(1)
  20. [Abp 源码分析]十五、自动审计记录

热门文章

  1. Linux中svn的使用
  2. winform视频教程-任务定时循环执行小工具
  3. Easyui入门视频教程 第08集---登录实现 ajax button的使用
  4. 我的Maven POM配置
  5. 【DeepLearning】Exercise:Self-Taught Learning
  6. Redis学习之路(005)- redis内存数据库C客户端hiredis API 中文说明
  7. 解决Mac上adb: command not found问题
  8. WSAAsyncSelect模型中,FD_WRITE事件什么时候触发?
  9. C#文件下载(实现断点续传)
  10. AD提高动态的方法(附SNR计算)