我在其上使用棘輪0.3.3,Laravel 5和PHP 5.5.9建立了一個實時的多人遊戲工作,服務器操作系統是Ubuntu Linux系統。服務器通過WebSocket(數百個用戶)向每個用戶發送每個週期約500字節的數據。 它看起來像WebSocket緩衝請求並一次發送5到6個請求(每個500字節)。 我們有30毫秒的週期。有沒有辦法手動設置WebSocket緩衝區設置,所以我的請求可以毫不拖延地發送?如何設置實時WebSocket緩衝區?
1
A
回答
2
我發現這個問題的解決方案。首先,IoServer類從Ratchet創建並擴展了IoServer。
class IoServer extends \Ratchet\Server\IoServer {
public static function factory(MessageComponentInterface $component, $port = 80, $address = '0.0.0.0') {
$loop = LoopFactory::create();
$socket = new Reactor($loop);
$socket->listen($port, $address);
$sock = socket_import_stream($socket->master);
socket_set_option($sock, SOL_TCP, TCP_NODELAY, true);
return new static($component, $socket, $loop);
}
}
0
Azure本身對Ubuntu VM的緩衝區設置沒有任何限制。首先,我將使用此處列出的命令 - How to find the socket buffer size of linux檢查當前的緩衝區設置值。 其次,如果要配置或調整它們,你可以參考 - http://www.cyberciti.biz/faq/linux-tcp-tuning/
不知道這是你正在尋找的答案,因爲Ghedipunk指出,這可能是使用Nagle算法中的一個問題,在這種情況下,你可能想嘗試在隧道的配置加上TCP_NODELAY配置 -
插座= 1:TCP_NODELAY = 1 插座= R:TCP_NODELAY = 1
雖然我個人從來沒有與棘輪工作。
PS-我想將此添加爲評論,因爲我不確定這是否是您正在尋找的正確答案,但SO論壇不允許我添加評論。
相關問題
- 1. 如何「重置」緩衝區?
- 2. 如何爲特定緩衝區設置緩衝區本地面屬性?
- 3. 如何在flex中設置緩衝區設置?
- 4. EMACS緩衝區等於文件時如何重置緩衝區修改標誌
- 5. 在JavaScript的Websocket上清除緩衝區
- 6. 如何在運行時設置緩衝區長度時使用read(ubyte []緩衝區)讀取BufferedFile?
- 7. 如何實現共享緩衝區?
- 8. Linux緩衝區是如何實現的?
- 9. 設置AVPlayer AVPlayerItem緩衝區大小?
- 10. 使用OSMF設置緩衝區圖形
- 11. 將隱藏緩衝區設置爲'nobuflisted'
- 12. 設置管道緩衝區大小
- 13. 設置緩衝區內容與變量
- 14. 設置GLKView渲染緩衝區大小
- 15. jetty-maven-plugin設置緩衝區大小
- 16. 模板緩衝區測試設置DirectX9
- 17. 無法設置深度緩衝區?
- 18. DeviceIoControl沒有設置輸出緩衝區
- 19. 在GZipStream中設置緩衝區大小
- 20. 去協議緩衝區設置錯誤?
- 21. CL_INVALID_ARG_VALUE設置緩衝區參數
- 22. Naudio緩衝區和實時流傳輸
- 23. FFMPEG實時緩衝區全幀丟失
- 24. OpenAL緩衝區實時更新
- 25. 級聯(緩衝區)實現
- 26. 設置接收和發送緩衝區的套接字緩衝區大小
- 27. 用臨時緩衝區使用ofstream寫入臨時緩衝區
- 28. 如何在php中設置輸出緩衝區名稱?
- 29. 如何忽略vimrc設置中的nerdtree緩衝區?
- 30. 如何在emacs中設置緩衝區局部變量
我無法理解您的問題。你的websocket服務器會每30毫秒發送一次消息給連接的客戶端嗎?但是現在你的客戶會收到5或6條消息嗎?你是什麼意思「在每個週期發送每個請求」? –
是我的websocket服務器每隔30毫秒向連接的客戶端發送消息。問題是這些消息不知何故排隊,並且客戶端同時得到5或6條消息。每當服務器生成它時,我都需要發送每條消息。 –
聽起來像你是納格爾算法的犧牲品。我建議設置'TCP_NODELAY'標誌,但是你使用棘輪... – Ghedipunk