2013-05-09 65 views
20

我有一個現有的PHP應用程序,我需要添加實時通知。爲了實現這一點,我安裝了node.js(打算爲所有實時功能添加socket.io)將Node.js(用於實時通知)添加到現有的PHP應用程序

但是,儘管花費了最近三個小時的研究,並試圖讓我的頭腦如何整合這兩者,但我發現自己並沒有接近取得理解。

我目前使用下列內容:

  • 阿帕奇
  • PHP
  • Nginx的(作爲反向代理到Apache的所有靜態內容,如 圖像/ css文件等)
  • MySQL的

我已經編寫了代碼,它將客戶端的事件發送到PHP並插入一個通知進入數據庫。當收件人刷新頁面時,他們當然會看到通知。我只需要node.js來處理實時推送給客戶端的事情,但不知道如何去設置它。

我真正需要知道的,因爲這種情況下,如下:

  1. 如何/時,給出 ,我希望所有的內容仍然Node.js的/ WebSocket連接到實例化的客戶端,通過Apache/PHP提供服務?
  2. 如何從PHP向Node.js發送消息並指示它將 通知發送給客戶端?
  3. 爲了支持我需要對我的設置進行哪種後端修改?

最終,我想簡單地能夠運行PHP函數並期望node.js/socket.io/websockets將通知推送到客戶端。我只是不知道如何到達那裏。

在此先感謝您的任何示例/信息/指南。

+0

1.當客戶端請求它; 2. [通過HTTP](http://stackoverflow.com/questions/10048978/sending-messages-from-php-to-node-js); 3. [設置nginx](http://stackoverflow.com/questions/5009324/node-js-nginx-and-now)。 – 2013-05-09 23:19:57

回答

17

我在這種情況下會做的是建立一個與Socket.IO的Node.js服務器。這爲您提供了一種用於向客戶端發送近實​​時數據的跨瀏覽器方法。

當客戶端加載您的PHP頁面時,您將有一個<script>標記指向您的Node.js服務器來加載Socket.IO。一旦加載,Socket.IO JavaScript客戶端將連接到您的Node.js Socket.IO服務器並等待事件發出。

現在,由於您希望從PHP發送這些事件,因此您需要PHP應用程序和Node.js之間的通信通道。我爲此推薦using Redis pub/sub。基本上,您的PHP應用程序發佈消息,並且已訂閱它的Node.js服務器將收到它。這些服務器可以立即將消息傳遞給客戶端,以從PHP獲取更多數據。 (我認爲你會發現雖然你的Node.js服務器可能只是簡單地發送這些數據)

如果你願意,你可以把Node.js放在你的Nginx服務器後面,but you need the latest and greatest version for true web socket support

+1

這聽起來很完美,尤其是因爲我已經在使用Redis來構建活動流。關於使用腳本標籤的部分就像一個燈泡熄滅。到底是什麼我以後。非常感謝。 – gordyr 2013-05-09 23:22:01

+0

而不是使用Redis的PHP和Node.js的之間的溝通渠道,你想想,捲曲從PHP發送請求到Node.js的應用程序是什麼?接下來,在Node.js應用程序的請求事件中,我們將向連接的套接字發送數據/通知。 – user345602 2014-01-19 00:48:55

+2

@ user346665這當然是一種選擇,但你有效地重新發明了與發佈/訂閱的車輪,然後你就必須要管理上/下的服務器列表,並處理的事實,你的PHP腳本去掛(除非你使用multicurl這是一個真正的麻煩這樣的事情)。 – Brad 2014-01-19 00:50:31

0

這個問題是舊的,但我發現它時,我想實現的WebSockets所以也許這將幫助別人誰需要它可以集成到現有的項目中沒有太多的黑客圍繞純PHP解決方案。

Ratchet - PHP WebSockets

唯一的要求是ZMQ對於PHP,這是用來作爲方法從PHP腳本數據傳遞到您的WebSocket服務器綁定。如果你的PHP實例沒有與它內置然後你可以找到它here

Github上回購是here,大量的實例讓你去是here

相關問題