使用Socket.IO和PHP推送通知

时间:2012-07-18 20:49:23

标签: php socket.io

想法/背景:

我正在考虑为我的用户提供一个很好的额外功能:我想添加推送通知。这是用例:

人们在个人资料页面上有留言簿。当有人在用户的留言簿中发布消息时,该用户将收到推送通知(如果他在线的话)。如果他不在线,下次他上网时,我们只会从数据库中提取通知。

我正在考虑使用在Node.JS服务器上运行的Socket.IO来做这件事。我目前的应用程序是用PHP构建的(因此发布等由PHP处理)。

所有在线用户都将使用Socket.IO进行连接,以收听他们自己的通知。他们的套接字将保存在服务器上的数组或散列中。

这是我想到的流程:

  1. UserA在UserB的留言板中发布消息
  2. 让Socket.IO向UserB发出通知(如果在线,Socket.IO知道)
  3. 将消息保存在DB
  4. 这里的问题是' make Socket.IO发出通知' - 部分。我需要一种方法来从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);
    

    问题:

    您对此有何看法?是否有更好的方法来实现这个看似很小的功能?而且,我如何在PHP中执行socketio_emit(),换句话说:如何使用PHP与Socket.IO服务器通信?

    非常感谢!

1 个答案:

答案 0 :(得分:9)

我通过使用Express.js和CURL发布新通知来解决这个问题。 Node.js服务器侦听特定的URL,例如/ new_notification。从我的网络服务器使用CURL向该URL发出POST请求,我可以添加新通知并使用Socket.IO处理它们(所有这些都在同一个Node.js应用程序中)。