繁体   English   中英

TCP推挽套接字服务器设计

[英]TCP push-pull socket server design

我正在设计一个跨平台的消息服务作为一项学习练习。 我以前曾经对基于套接字的服务器进行过编程,但始终像Web服务器一样采用“客户端轮询服务器”设计。 我希望能够定位到移动平台,并且我读到轮询会消耗大量电池,因此我想进行推送通知。

该服务器将基于C ++,基于TCP。 我遇到麻烦的是如何管理设计的双向性。 我需要一个客户端能够像往常一样将数据包发送到服务器,而且还要侦听数据包。 我该如何缓解这种情况,例如,当服务器尝试向客户端发送数据时客户端正在发送数据,或者它阻止了侦听数据,但随后又需要发送数据?

例如,考虑以下粗图:

原始图

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

还是有更好的方法来解决这个问题?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM