2016-04-08 34 views
-1

我目前正在使用服務器發送事件的應用程序。與WebSockets相比(我還沒弄清楚如何設置),我真的很享受它們設置的方便程度。如果你不熟悉這種技術,服務器發送的事件允許其中一個與服務器保持開放連接,以實現從服務器到客戶端的單向數據流。如何使服務器發送事件有效

但是,我不確定如何以最有效的方式運行這些SSE。我有兩個選擇:

  1. 不斷讓SSE運行。
  2. 根據需要打開和關閉連接。
  3. ??

選項二對我來說似乎最符合邏輯。但是,我不是CS專業,也不完全瞭解所有這些技術的工作原理。

我回想起古老的神話,如果你經常打開和關閉燈泡,燈泡將使用更多的能量。據我所知,情況並非如此。談到上證所時,我也覺得情況並非如此,只是讓它無故地運行會浪費不必要的帶寬。

有什麼想法?

+1

「高效」通過什麼措施? –

+0

比較1 vs 2 – Shawn31313

+1

我的意思是:你用什麼指標來評估和比較這兩種選擇?它是否是延遲?同時打開的連接數量?還有別的嗎? –

回答

0

正如你所說,SSE背後的想法是,你需要保持一個連接打開,然後在一段時間後關閉並重復該過程。問題是,如果你保持很多連接打開,你可能會結束並最終耗盡所有連接。這真的很糟糕。

如果你想用PHP實現一個「高效」的SSE,你需要一個事件循環,比如由Node.JS或者Twisted for Python提供的平臺。我們有React。你應該使用它。

在谷歌我只找到了一些old repository,但他們應該給你一個想法做什麼。

...或者只是使用Node.js:合適的工具。

+0

事件循環無助於減少連接數量和帶寬。它只允許每個進程有多個連接並執行異步事情。所以它在系統級更有效率,因爲你將得到更少的進程,但並不是PHP中的所有用例都需要這樣的「複雜」設置(例如處理任務並簡單地發回進度)。 另外,如果我要參加事件循環,我不會選擇React,而是Amp(https://github.com/amphp/amp),它更加先進,設計更好,並且由智能人員驅動。 –