使用Socket.IO和PHP推送通知


Push notifications using Socket.IO and PHP

想法/上下文:

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

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

我想用在Node.JS服务器上运行的Socket.IO来实现这一点。我目前的应用程序是用PHP构建的(所以发布等都是用PHP处理的)。

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

这就是我脑海中的流程:

  1. 用户a在用户B的留言簿中发布消息
  2. 使Socket.IO向UserB发出通知(如果处于联机状态,则Socket.IO已知)
  3. 将消息保存在数据库中

这里的问题是"使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服务器通信?

非常感谢!

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