我正在開發一個使用EventMachine的實時應用程序。兩個客戶端A
和B
通過標準TCP連接到EventMachine服務器,或者通過帶有em-websocket的WebSocket連接到EventMachine服務器。看到由於EventMachine量產引起的長時間延遲 - 我如何加快速度?
每次數據通過EventMachine時,代碼執行都需要95ms的時間。當A
與服務器通話時,延遲時間爲95毫秒。當A
與B
對話時,則有190ms的延遲。
如果有許多請求快速連續發生,除了序列中的最終請求之外,延遲消失。所以,如果我發送10個快速請求,每個約5ms後我會得到9個響應,但第10個響應再次需要95ms。我推斷這和EventMachine.set_quantum有關。從文檔:
方法:EventMachine.set_quantum
對於高級用戶。此功能設置默認計時器粒度 ,默認爲,略小於100毫秒。調用這個 函數來設置更高或更低的粒度。該函數影響add_timer和add_periodic_timer的行爲 。大多數應用程序 將不需要調用此函數。
避免將量程設置爲非常低的值,因爲這可能會降低在某些極端條件下的性能。我們建議你不要 使用低於10的值。
那麼,這解釋了95ms來自何處。果然,延遲更改通過調用EventMachine.set_quantum
,但由於文檔中的警告,我謹慎調整此值。
set_quantum
究竟是幹什麼的?我找不到任何有關量子變量含義的文檔或解釋。
我該怎麼做才能減少這些延遲?我想了解減少10ms量子的潛在影響。
EventMachine甚至是正確的選擇嗎?我基本上用它作爲榮耀的TCP連接。也許我應該堅持使用原始套接字進行進程間通信,並找到不使用EventMachine的WebSocket服務器gem。
嗨Schrockwell。你看過[Plezi網頁應用框架](https://github.com/boazsegev/plezi)嗎?它支持本地websocket並且不使用Rack或EventMachine(它運行本地Ruby服務器)。另外,它的實現非常容易。如果你嘗試一下,你能讓我知道你對它的表現有什麼看法嗎? – Myst