免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1267 | 回复: 0
打印 上一主题 下一主题

求教:多连接监控设计问题,谢谢!!欢迎讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-18 10:03 |只看该作者 |倒序浏览
大家好, 我们开发的系统需要实现多前台对后台进程的监控问题,请大家推荐一个好的实现架构:

后台有一个服务进程,多个客户端进程可以对服务进程活动进行监控(建立连接后,后端服务进程的某些操作动作记录可以主动推送到客户端)。客户端数量不确定,可以随时增
加或减少。不同客户端监控的活动可能也不同,比如客户端1监控服务进程的io操作,客户端2监控服务进程的网络操作。

客户端的总量不会超过50个,服务进程的活动大约几百毫秒一次,希望能够采用多进程设计。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

目前我的思路是,消息队列 + 多路复用socket方式。增加一个监控管理进程实现全部功能:

1. 服务进程将操作动作写入一个消息队列
2. 监控管理进程维护一个已建立连接的socket列表。该进程建立tcp监听socket lfd,负责接收新的连接请求。该进程采用非阻塞的方式读取消息队列,select方式处理socket。
3. 监控管理进程执行流如下:
  1. while (1)
  2.     {
  3.          select(); //非阻塞,设置较小的超时时间
  4.          if (lfd准备好)
  5.         {
  6.               accept建立连接;
  7.               将新socketfd加入socket列表;
  8.         }
  9.         read消息队列;
  10.         if (新消息)
  11.         {
  12.              遍历socket列表,调用send;
  13.         }
  14.     }
复制代码
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上监控管理进程设计存在一下几个问题:
1. 由于采用非阻塞设计,当消息队列为空,上述进程处于空转,忙时等待效率低。
2. 当已建立的socket列表中某个描述符调用send时,延迟可能比较大,从而拖慢整个发送过程,也降低进程对新连接的响应速度。
3. 没有实现消息的分类发送。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

欢迎大家指教,最好能有更好的解决方案,谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP