我尝试通过tcp套接字发送数据。
我将数据从我的本地PC(服务器:基于java,nagle algorithmus disbled)发送到示例ios tcp客户端。 我在iPhone上尝试了不同的库," CocoaAsyncSocket"和#34; FastSocket"。对于它们两者,客户端有时会立即接收数据,并且大约每三次数据需要500ms - 4000ms才能到达。
我尝试使用Android设备作为客户端,它就像一个魅力!
有什么建议吗?
答案 0 :(得分:0)
我遇到了同样的问题,它只发生在i设备上,有时我可以通过一切发送立即进行整个会话,有时我得到一个如此大的延迟,我认为消息甚至没有被发送,但是之后,有时差不多一分钟,一个467字节的小包到来......
在研究这个问题的同时,我可以通过这个文档:http://www.stuartcheshire.org/papers/nagledelayedack/有点老但很有趣。作者建议,这表明tcp喜欢持续流动,并且不时发送消息可能会导致问题。
从链接引用:
总的来说,许多使TCP如此强大的机制(如快速重传)在TCP状态机的连续数据流工作时效果最好。如果发送数据块然后停止并等待来自另一端的应用程序层确认,则状态机可能会停滞不前。这有点像水泵失去它的黄金 - 只要整个管道充满水,泵运行良好,水流动,但如果你有一点水,然后是一堆空气,泵会因为叶轮没有什么可以推动的。
如果您正在通过TCP编写请求/响应应用程序层协议,这意味着您将要实现至少双缓冲:发送您的第一个请求,当您还在等待响应,生成并发送第二个。然后,当您收到第一个请求时,生成并发送第三个请求。这样你总有两个未完成的请求。当您在等待请求n的响应时,请求n + 1在返回管道中位于其后面,从概念上推送数据。
我自己还没有尝试过,但这些信息可以帮助你或其他人。
此致 博
修改强> 我每隔0.05秒发送大量的(除非)消息(我知道有点过分),我刚刚测试了它似乎改善了一些事情,我发送给无用的消息的所有重要消息似乎都被立即收到了,我已经只是测试了不到一分钟,但它似乎有所作为