Vert.x的SockJS实现在发送消息时存在延迟

3
我们的 WebSocket 解决方案中使用了 vert.x 的 sockJS 实现。当 vert.x 快速发送多条消息时,有些消息会在客户端上出现很晚的情况。这些晚到的消息只有在心跳被发送后才会到达。你们有什么想法吗?
我们通过将 sockjssocket.write() 方法放置在 synchronized 块内,临时解决了这个问题,但这感觉有点像 hack。我们之所以将其放入 synchronized 块中,是因为我们认为这与并行写入套接字缓冲区有关。
祝好!
Daan
1个回答

2
WebSockets是在TCP上实现的协议层。
TCP具有一些机制来优化网络性能,并允许可靠和有序地传递流块。其中一个“优化”是Nagle算法,它在网络层中排队小块,直到它们满足发送数据包的大小,然后只发送一次。
这个算法在vert.x中可能不被禁用。看起来this指向实际设置,你可以使用它来禁用它。
如果这样行不通,你需要确保SockJS库不会为了“优化”而重新创建相同的机制。
该算法的目的是将较小的块组合并作为一个数据包发送,从而减少承载每个块的TCP头部的底层网络开销。如果您发送许多小块,请确保您进行了优化(自己合并),因为更好地发送大块。

这个链接已经失效了。你能否更新一下你的回答? - Manu K Mohan
vertx.io似乎更改了URL,已更新。顺便说一下,您可以自行更新。 - moka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接