忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: duanjigang

谈谈你接触的通讯程序的模型 [复制链接]

论坛徽章:
0
发表于 2011-01-08 12:10 |显示全部楼层
我觉得ESB是我见过的算是比较好的通讯模型了

论坛徽章:
0
发表于 2011-01-08 12:19 |显示全部楼层
本帖最后由 duanjigang 于 2011-01-08 12:22 编辑
我觉得ESB是我见过的算是比较好的通讯模型了
ashlv 发表于 2011-01-08 12:10



哈哈,另外一篇文章就在说ESB。。我还是孤陋寡闻了

论坛徽章:
0
发表于 2011-01-09 23:05 |显示全部楼层
我常用的通讯模型:
多reactor,用round_robin处理reactor的负载均衡,reactor与TCP连接为一对多的关系。
发送的数据使用消息队列,单独线程发送,处理超时重发以及EWOULDBLOCK重发问题。
心跳协议必须的,定时器可以集成到reactor里。
服务器间通讯现在直接用protocol buffer了,方便。

论坛徽章:
0
发表于 2011-01-09 23:45 |显示全部楼层

项目server架构

项目server架构


这个是我在最近打算换工作,总结以前项目的时候随便画的。

服务器主要分为两个层次:通讯层和业务处理层。(采用epoll网络模型)

在通讯层又分为两个层次:
1)与客户端的数据交互
      该模块只负责接受请求、接受数据、发送数据(各为一个独立的线程),接收到客户端的数据之后将数据放入到数据队列中,发送数据的时候从数据发送队列中读取数据进行发送;
2)与业务层的数据交互
      该模块负责将从客户端读取的数据发送给业务处理进程和从业务处理进程读取数据,与业务处理进程通信采用的方式为:用fifo实现事件通知机制,用共享内存实现queue达到数据传输的目的

业务处理层比较简单,用select接收到事件通知后,读取数据,处理数据,再讲处理结果放到数据队列中,然后在用fifo来通知通讯层去读取数据,处理模型为reactor模型;

通讯层与业务处理层的数据是轮训方式nconnect++/业务处理层进程数。

评分

参与人数 1可用积分 +5 收起 理由
duanjigang + 5 很实用

查看全部评分

论坛徽章:
0
发表于 2011-01-10 10:27 |显示全部楼层
楼上的不错

论坛徽章:
0
发表于 2011-01-10 16:21 |显示全部楼层
这个是我在最近打算换工作,总结以前项目的时候随便画的。

服务器主要分为两个层次:通讯层和业务处 ...
jiang1013nan 发表于 2011-01-09 23:45



    jiang103nan兄弟这个模型不错,我最近看了epoll后也是想把以前的模型改成你描述这样的。
对了,性能测试有做过吗?性能如何,并发如何?

论坛徽章:
0
发表于 2011-01-10 16:24 |显示全部楼层
我常用的通讯模型:
多reactor,用round_robin处理reactor的负载均衡,reactor与TCP连接为一对多的关系。
...
maclaurin 发表于 2011-01-09 23:05



    嗯,听说protocol buffer是很不错的一个咚咚,有空研究下。兄弟有空关于您使用的模型能详细说点不?
到数据结构,算法层面。呵呵

论坛徽章:
0
发表于 2011-01-10 16:32 |显示全部楼层
同请教33楼和34楼两个问题:
第一:你们的通讯程序独立于应用程序吗???
也就是说把通讯做成纯粹的通讯程序,要增加应用业务,对通讯而言只需要修改配置文件或者根本什么都不需要做?

第二:通讯程序发送的数据是分包的吗?对于大数据量发送怎么做的?比如A应用通过我们的通讯程序想发送一个文件到B应用,怎么做的?
谢谢!

论坛徽章:
0
发表于 2011-01-10 20:51 |显示全部楼层
回复 36# duanjigang

在实际生产环境中达到了8K人左右额。

论坛徽章:
0
发表于 2011-01-10 22:00 |显示全部楼层
同请教33楼和34楼两个问题:
第一:你们的通讯程序独立于应用程序吗???
也就是说把通讯做成纯粹的通讯 ...
duanjigang 发表于 2011-01-10 16:32



第一:你们的通讯程序独立于应用程序吗???
独立,一个前置通讯网关对应多个应用服务器。

第二:通讯程序发送的数据是分包的吗?对于大数据量发送怎么做的?比如A应用通过我们的通讯程序想发送一个文件到B应用,怎么做的?
应用层分包?如果是TCP,应用层不管分包的事,如果是UDP的话,就要考虑分包,要用到应用层协议里的frame_seq来维护包和包之间的上下文关系。发送文件,linux下用sendfile,windows下TransmitFile。

关于通讯模型,最近一直想用epoll_reactor来模拟proactor,boost::asio是实现了,可惜C用不上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP