TCP推挽式插座服务器设计

时间:2014-12-23 14:10:58

标签: c++ sockets tcp

我正在设计一个跨平台的消息服务作为学习练习。我之前编写过基于套接字的服务器,但始终是" client-polls-server"设计,就像一个Web服务器。我希望能够定位移动平台,我读到轮询是电池耗尽,所以我想做推送通知。

服务器将基于TCP,用C ++编写。我无法理解的是如何管理设计的双向性。我需要一个客户端能够正常发送数据包到服务器,但也监听数据包。如何缓解客户端在服务器尝试发送数据时发送数据,或者阻止侦听数据然后需要发送内容等情况?

例如,请考虑以下粗略图表:

crude diagram

所以,让我们说客户A正在发送一大块数据(箭头1)。当发生这种情况时,客户端B发送消息(箭头2),这导致服务器尝试将数据发送回客户端A(箭头3),但客户端A尚未完成发送箭头1。在这种情况下会发生什么?我应该在每个客户端上设置2个单独的端口,一个用于入站,一个用于出站?我是否需要跟踪每个连接的状态?

或者是否有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

一个套接字端口本质上是双向的。要同时或多或少地处理入站和出站流量,您需要使用非阻塞套接字。

答案 1 :(得分:0)

我认为解决方案非常简单。 TCP服务器应该有一个连接客户端的列表。由于TCP连接是双向的,因此推送机制非常简单。

另一个重要的事情是,只要您的服务器不是多线程的,您就可以同时读取或写入一个客户端。