2014-01-10 90 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