2014-01-26 37 views
0

我有工作像這樣一個簡單的數據流:服務器發送的事件

客戶註冊到事件的創造者服務器, 第三方發出一個POST請求到服務器, 和服務器,然後發送一個事件給它的所有監聽器(客戶端)。

發送事件我以爲我會使用服務器發送的事件,但我有問題,因爲發送事件的腳本沒有在任何時間運行,所以任何試圖連接到事件的人只是繼續試圖連接和沒有任何東西,當第三方確實發佈帖子時,沒有人註冊運行腳本的事件。

我該如何保持腳本始終運行?如果我這樣做,這不會造成資源泄漏嗎?

有沒有辦法做到這一點,以便您註冊「未來」腳本將創建的任何事件?

回答

0

基本上你需要在這個看作兩個完全獨立的問題:

  1. 如何事件發佈到用戶通知隊列
  2. 我怎樣做近乎即時通知訂閱的客戶端

讓我們開始2)

有很多的方法,應付這一非常普遍的問題,其中有許多依賴性。如果您控制服務器(在根級別上),您可以從衆多選項中進行選擇,但是如果您希望在任何低成本PH​​P環境中使用此服務器,我建議您長時間進行投票,以輕鬆熟悉並且容易理解的方式技術:您有客戶端通過AJAX調查服務器,服務器端輪詢腳本監視服務器上的事件。只有在30-120秒內停留在超時時間之後才能從腳本中返回(同時可能會發送一些佔位符)。如果發生事件,請立即返回事件。

這解決了你不斷運行的腳本問題:客戶端保持運行。

假設你得到了這個,1.看起來很平凡:將事件發佈到中央隊列(例如數據庫)並踢出輪詢者例如通過SHM或文件刪除。