簡體   English   中英

檢測事件流並將其推送到Web瀏覽器(HTML5,PHP,PostgreSQL)?

[英]Detecting and pushing a stream of events to a web browser (HTML5, PHP, PostgreSQL)?

我當前正在開發的網站是用PHP編寫的。 當用戶使用該網站時,他們將執行操作,我希望能夠將這些操作的通知推送給他們所連接的其他用戶。

現在,雖然我確定使用EventSource和PHP文檔來存儲適當的數據:行會起作用,但我完全不知道當實際需要發送新消息時,如何通知該PHP文檔。

我的基本意思是,當發生操作時,將在PostgreSQL數據庫中包含消息信息(例如已執行的操作)的條目。 但是,讓“消息傳遞” PHP文檔的每個實例(與EventSource連接的實例)連續輪詢PostgreSQL是否有新消息並沒有效率。 如果一次有50個用戶處於活動狀態,那將是50個實例輪詢PostgreSQL,並且您可能會看到,這不是非常有效地使用資源。

因此,我想知道是否有人對可能有助於解決此問題的軟件有任何建議。 理想情況下,我希望能夠調用一個函數,該函數指示已執行某項操作,然后將其發送給“消息傳遞” PHP文檔的所有其他實例,以便他們可以解釋消息並查看消息是否相關並將其推回給客戶。

本質上,我需要一種方法,通過在另一個PHP實例中調用帶有消息信息的函數,以通知正在運行的PHP實例(通過Apache啟動)正在創建新消息。 我不需要幫助將消息發送給客戶。 我可以使用EventSource做到這一點。

是否有人對如何執行此任務有任何建議?

解決該問題的常規方法是使用Java小程序(可以將套接字打開回原始服務器)或使用長輪詢(例如Comet )。

通過使用帶有消息計數鍵值和消息$ i鍵值的memcache(其中$ i是遞增數字),我已經成功地做到了這一點。 一個PHP文檔通過長時間輪詢連接到該文檔,並且它不斷檢查以查看message-$(messages-count)是否存在,在這種情況下將其返回。

還有更多的事情,因為如果一次創建它們將返回多條消息,並且還可以將初始校驗號($ i)加載為$ _GET參數,但這實際上是它的工作方式。 它幾乎是即時的,可以通過PHP將新消息輕松添加到內存緩存中(每次創建新消息時,都會增加messages-count)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM