vert.x sockJS实现延迟了消息的发送

时间:2014-01-10 16:36:47

标签: websocket sockjs vert.x

我们正在为我们的websockets解决方案使用vert.x sockJS实现。当vert.x在一个接一个地快速发送一些消息后,一些消息将很快到达客户端。延迟消息仅在发送心跳时到达。知道这有可能吗?

我们通过将sockjssocket.write()方法放在synchronized块中暂时修复了这个问题,但这感觉有点像黑客。我们把它放在synchronized块中的原因是因为我们认为它与并行写入套接字缓冲区有关。

亲切的问候,

大安

1 个答案:

答案 0 :(得分:2)

WebSockets是在TCP之上实现的协议层。

TCP具有一些优化网络性能的机制,并允许可靠且有序地传递流块。其中一个“优化”是Nagle's algorithm,它在满足要发送的数据包大小之前将网络层中的小块排队,并且只在它足够大时才发送。

在vert.x中未禁用此算法可能会发生什么。看起来this指向实际设置,您可以使用它来禁用它。

如果这不会有帮助,您需要确保SockJS库不会“重新创建”相同的机制以进行“优化”。

此算法的目的是组合较小的块并作为一个数据包发送,从而减少每个块承载TCP报头的底层网络开销。如果你发送了很多小的,请确保你优化它(合并自己),因为最好发送更大的块。