使用 Socket.IO 和 PHP 推送通知

Posted

技术标签:

【中文标题】使用 Socket.IO 和 PHP 推送通知【英文标题】:Push notifications using Socket.IO and PHP 【发布时间】:2012-07-18 00:05:33 【问题描述】:

想法/背景:

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

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

我正在考虑使用在 Node.JS 服务器上运行的 Socket.IO 来执行此操作。我当前的应用程序是用 php 构建的(因此发布等由 PHP 处理)。

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

这是我想到的流程:

    UserA 在 UserB 的留言簿中留言 使 Socket.IO 向 UserB 发出通知(如果在线,则 Socket.IO 知道) 在数据库中保存消息

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

非常感谢!

【问题讨论】:

通过保持与服务器的持续打开连接来维护推送通知。 ***.com/q/6933497/11963 @ColeJohnson 我猜你指的是长轮询。问题实际上是:如何使用 PHP 与 Socket.IO 服务器通信。 您可以使用 PHP 向 socket.io 服务器发送请求 【参考方案1】:

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

【讨论】:

在我进入 Express 之前...在这个解决方案中依赖 Express 为您提供了什么具体的功能?也许我遗漏了一些东西,但我不能只考虑一个特殊的传入请求而不使用 Express 吗? 你不依赖 ExpressJS 来做这个解决方案。不使用也可以达到同样的效果

以上是关于使用 Socket.IO 和 PHP 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Socket.IO 上的 PHP 应用程序 + 基于 WebSocket 的通知

来自 php 服务器的 Android 推送通知

在节点 js 中推送通知

关于使用PHP socket.io 做消息推送服务

使用 socket.io 技术实现消息实时推送

egg.js集成Socket.io实现推送和即时通信