使用TCP套接字更快地发送多个小消息或更少的消息

时间:2012-03-11 01:07:05

标签: objective-c tcp network-programming tcpclient tcpsocket

我可以在任何地方找到任何文档,并且想知道什么是尽可能快地发送多个消息的最佳方法。

例如,如果我有300台设备从一台服务器收到消息,那么发送一条大消息并让设备挑选出他们需要的部分或发送300条消息但大小为1/300的情况会更好。它们只会是小叮当,所以300个devies每个只能获得6个字节

它有所作为吗?

先谢谢了。

1 个答案:

答案 0 :(得分:1)

如果启用了套接字的Nagle算法,则通过给定连接发送多个较小的消息通常比通过同一连接发送较少的较大消息要慢。 Nagle在内部缓冲出站数据,必须等待足够的数据进行缓冲和/或超时,以便它可以发送有效的消息。对于一般套接字使用,通常首选启用Nagle,因为它在大多数应用程序可接受的速度,性能和开销之间提供了良好的平衡。但是,如果您需要发送时间敏感的消息,那么您通常必须禁用Nagle,以便尽快单独传输每条消息。

但是,对于使用TCP无法向多个设备发送单个消息的描述。据推测,每个设备都有自己的TCP连接直接与服务器。要向所有300个连接发送单个消息,您必须为该消息制作300个独立副本,每个连接一个。 TCP没有广播功能(如果需要,可以切换到UDP或多播)。发送单个服务器消息并让300个设备响应它的唯一方法是,设备不是直接连接到服务器,而是通过代理进行通信,该代理维护与服务器的单个连接并将接收到的服务器消息转发给每个服务器。设备根据需要。