0

我的应用程序是用 PHP 构建的(在 nginx/php-fpm 上提供服务),我使用 node/js 和 socket.io 来为用户推送通知。这些是使用 Redis pub/sub 推送的,以在 PHP 和 node.js 之间进行互连

node.js 应用程序维护着一系列在线用户 ID。当用户连接到 socket.io 时,它们会被添加,而当用户断开连接时,它们会从阵列中移除。

MySQL 用作主数据库,我有一个标准关系表,表示谁在关注谁。当用户登录并显示给他们时,会检索关注者用户 ID 的列表。

我现在希望将这两组数据相交,以类似于 facebook 的方式提供这些关系的实时在线状态(在线为绿灯,离线为灰色)

管理这个的最高效和最可扩展的方式是什么。我目前的思考过程是这样的:

在客户端,我们有一个由追随者用户 ID 组成的 javascript 数组。设置一个计时器客户端,每 60 秒左右将此数组推送到 node.js 应用程序。Node.js 使用当前在线用户数组处理追随者 id 的插入,并返回一个描述哪些用户在线的对象。

现在这可以工作了,但感觉它可能是 node.js 上的一个沉重负担,要不断地循环遍历每个在线用户的用户关注者列表。或者也许我错了,考虑到主应用程序本身是由 PHP 服务的,而不是通过当前仅处理通知推送的节点,这将是相对微不足道的?

无论如何,有没有更好的方法?值得注意的是,我还使用 redis 来构建用户活动流(数据存储在 MySQL 中,redis 维护活动 id 的列表)

所以看到我已经有一个 Redis 服务器处于活动状态,是否有更好的方法来利用 Redis 本身呢?

感谢您的任何建议

4

1 回答 1

0

If i remember right, when socket.io connected to client side, that makes a request to the client every time for checking active connection and return result, in callback succeffull you can put code that will be update time active users in DB. And when get last notes beyond 5 minutes from DB.

于 2014-02-01T10:47:48.347 回答