我的应用程序是用 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 本身呢?
感谢您的任何建议