gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:44:10 25 4
gpt4 key购买 nike

我的应用程序是用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com