一个Socket连接如何用一个线程实现可靠高效的接收和发送

myrfy2004 2015-01-18 11:13:34
系统的架构如图所示,其中:



服务器A:
1}对外开放的服务器,有多个客户端连接到该服务器。

2}每个与客户端的连接分配一个线程,专门负责处理这个Socket

3)服务器A需要将各个客户端的数据进行汇总和处理,然后通过一个新的Socket连接到内部服务器B,同样有一个专门的线程负责与B的连接

4)内部服务器B将处理结果返回A,A再根据一定的规则将数据回发给各个客户端


服务器A上通过线程安全的队列实现线程之间的数据交换。


问题:
对于任何一个对外连接的Socket,需要判断两个事情:
1、Socket上是否有客户端发给我的信息?如果有,转发给服务器B
2、我自己的发送队列是否有数据?有的话,将其发送给客户端。

这两个操作,如何在一个线程里实现:
a、接收和发送互不阻塞
b、不使用轮询的方法,降低CPU资源占用
...全文
809 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightForProgrammer 2015-06-02
  • 打赏
  • 举报
回复
有很多网络模型可以参考的。 i/o多路复用技术,缓存系统memcached、redis等 多看看经典的书籍,源码就能有针对性的解决具体问题了
jiqiang01234 2015-06-02
  • 打赏
  • 举报
回复
我看最好把AB之间的通讯用单独的进程来处理,而不是用线程。
Sandrer 2015-01-18
  • 打赏
  • 举报
回复
IOCP重叠I/O模型

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧