DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 1
在线用户: 2
导航: 论坛 -> 开源项目 斑竹:joki,ralf_jones  
作者:
男 dinkysoft (天地弦) ★☆☆☆☆ -
盒子活跃会员
2014/5/28 23:25:12
标题:
DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + 多进程 + QWorkers) 出炉了 浏览:4575
加入我的收藏
楼主: [概述]

自从上次发布了[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框架做一些例子的整合。
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
作者:
男 chinaz (有缘人) ★☆☆☆☆ -
神秘会员
2014/5/28 23:54:21
1楼: ding
----------------------------------------------
一路风雨走过,因为有你们
作者:
女 google220 (google220) ★☆☆☆☆ -
普通会员
2014/5/29 1:20:17
2楼:  期待ADO方案。
----------------------------------------------
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
作者:
男 zxh3344 (zxh3344) ★☆☆☆☆ -
普通会员
2014/5/29 8:32:41
3楼: 很强悍,期待解决方案的应用
----------------------------------------------
-
作者:
男 dbyoung (dbyoung) ★☆☆☆☆ -
普通会员
2014/5/29 8:38:56
4楼: 不错,顶一下。以前写过,的确有点繁琐
----------------------------------------------
武汉天气不好
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2014/5/29 8:58:04
5楼: 贴出来了,支持一下,回头有时间详细看看
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 lsuperxe (delphi lsuperxe) ▲▲▲▲△ -
普通会员
2014/5/29 9:16:08
6楼: 强烈支持
----------------------------------------------
2CCC
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
2014/5/29 14:16:55
7楼: 顶起来
----------------------------------------------
-
作者:
男 dinkysoft (天地弦) ★☆☆☆☆ -
盒子活跃会员
2014/5/29 20:49:47
8楼: 今天QDAC裙主测了一天,发现我用的这个无锁队列其实是个坑,...准备替换
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
作者:
男 chineseswish (swish) ★☆☆☆☆ -
普通会员
2014/5/29 20:58:51
9楼: 哈哈,我是负责剖坑的
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
男 zrygo (大飞) ▲▲▲▲▲ -
普通会员
2014/5/30 10:48:18
10楼: 支持 期待更多应用实例
----------------------------------------------
-
作者:
男 delphi_liang (露露) ▲▲▲▲△ -
普通会员
2014/5/30 17:08:00
11楼: 支持一下~~~~文字

----------------------------------------------
delphi菜鸟一只~~~
作者:
男 lwsxln (lwsxln) ▲▲▲▲▲ -
普通会员
2015/2/14 21:51:42
12楼: 太高级了,看不懂啊
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行101.5625毫秒 RSS