2014-01-10 94 views
3

我们正在为我们的websockets解决方案使用vert.x sockJS实现。当vert.x在彼此之后快速发送几条消息时,某些消息将很晚才到达客户端。迟到的消息只在心跳被发送时才到达。任何想法如何这是可能的?vert.x sockJS实现延迟发送消息

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

亲切的问候,

大安

回答

2

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

TCP有一些机制来优化网络性能,并允许可靠和有序地传送流块。其中一种“优化”是Nagle's algorithm,它在网络层中对小块进行排队,然后才能满足要发送的数据包的大小,并且只发送一次足够大的数据。

什么潜在的情况发生,这种算法没有在vert.x中禁用。看起来像this指向您可以使用以禁用它的实际设置。

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

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

+0

'此'链接不再有效。你能否更新你的答案? –

+0

vertx.io似乎更改了网址,已更新。你可以更新自己顺便说一句。 – moka