2012-07-18 274 views
8

的想法/背景:推送通知

我想給我的用戶一個很好的額外的功能:我要添加推送通知。這是用例:

人們在他們的個人資料頁面上留言。當某人在用戶留言簿中發佈留言時,該用戶將收到推送通知(如果他在線)。如果他不在線,下次他上線時,我們只需從數據庫中提取通知。

我正在考慮在Node.JS服務器上運行Socket.IO。我目前的應用程序是用PHP構建的(所以發佈等由PHP處理)。

所有在線用戶將使用Socket.IO連接以偵聽自己的通知。他們的套接字將被保存在服務器上的數組或散列中。

這是我心目中的流程:

  1. 用戶A在用戶B的留言發佈消息
  2. 讓Socket.IO發射到用戶B的通知(如果在線,通過Socket.IO所以知道)
  3. 在DB

保存的信息在這裏的問題是, '讓Socket.IO發出通知' -part。我需要一種方法來從PHP這樣做,因爲我想服務器發出此通知和而不是發佈消息的用戶。你爲什麼問?我想阻止惡意用戶創建虛假通知。因此,在僞代碼的PHP應用程序應該是這樣的:

// do some validations here ... 

// This is the message that was posted 
$message = array(
    'from' => 'UserA', 
    'to' => 'UserB', 
    'msg' => 'Hello you' 
); 

// Send a notification to the user by emitting an event 
socketio_emit('notification', json_encode($message)); 

save_in_db($message); 

的問題(S):

什麼是你對這個想法?有沒有更好的方法來實現這個看似小的功能?另外,如何在PHP中執行socketio_emit(),換句話說:我如何使用PHP與Socket.IO服務器進行通信?

非常感謝!

+0

推送通知通過保持與服務器的連續開放連接來維護。 – 2012-07-18 20:58:55

+0

http://stackoverflow.com/q/6933497/11963 – hangy 2012-07-18 21:03:38

+0

@ColeJohnson我想你指的是長輪詢然後。問題實際上是:我如何使用PHP與Socket.IO服務器進行通信。 – EsTeGe 2012-07-18 21:06:35

回答

9

我通過使用Express.js和CURL發佈新通知來解決此問題。 Node.js服務器監聽特定的URL,例如/ new_notification。使用CURL向該URL發送POST請求,我可以添加新的通知並使用Socket.IO處理它們(全部在同一個Node.js應用程序中)。

+0

在我進入Express之前......依靠Express爲您提供的解決方案有哪些特別之處?也許我錯過了一些東西,但是我不能只使用Express來處理特殊的傳入請求? – 2013-08-27 01:08:30

+1

您不依賴ExpressJS來執行此解決方案。您可以在不使用它的情況下獲得相同的結果 – 2014-03-06 15:21:37