javascript - 显示在线关注者的最佳方式是什么,node.js/socket.io 和 Redis

标签 javascript node.js redis socket.io

我的应用程序是用 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 而不是通过当前仅处理通知推送的 Node 提供服务,这将是相对微不足道的?

不管怎样,有没有更好的方法?值得注意的是,我还使用 redis 来构建用户事件流(数据存储在 MySQL 中,redis 维护事件 ID 列表)

鉴于我已经有一个 Redis 服务器处于事件状态,是否有更好的方法来代替利用 Redis 本身?

谢谢你的建议

最佳答案

如果我没记错的话,当 socket.io 连接到客户端时,每次都会向客户端发出请求以检查事件连接并返回结果,在成功回调中,您可以将更新时间事件用户的代码放入数据库中.当从 DB 获取超过 5 分钟的最后笔记时。

关于javascript - 显示在线关注者的最佳方式是什么,node.js/socket.io 和 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17092831/

相关文章:

javascript - 在jsdom加载的脚本中设置全局变量

redis - master 总是具有最小优先级的 redis 实例吗?

javascript - 模块名称和类名称之间的歧义

javascript - 为什么将 jQuery 作为参数传递给 (function($){..})(jQuery) 闭包包装器,而不是本地变量?

javascript - 无法将 .onClick 方法添加到子组件中的对象

javascript - 如何在select2框的最后添加新选项?

javascript - 在将响应发送回客户端之前,如何等待 Mandrill 的交付响应?

node.js - Nodejs + Express + OpenId 连接并重定向到 root

雷迪斯 : How can I sort my hash by keys?

sql - MongoDB/Redis/SQL 并发模式 : read-modify-write by multiple processes