问题标签 [socket.io-redis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
765 浏览

node.js - 如何在由 socketio-redis 管理的 socketio 进程集群中找到用户套接字

我是 socketio-redis 适配器的新手。最初我有一个 socketio 进程,但现在尝试使用 socketio 集群。

当它是一个进程时,我会维护一个已连接套接字的映射,以通过 userId 找到一个套接字。当用户 A 发射到房间时,如果用户 B 已连接但尚未进入房间,则 B 的套接字被找到并加入了该房间。然后A的插座发射到房间。

我的问题是,如何使用 socketio-redis 来解决这个问题?

下面是一个简化的计划。是否可以在一个 socketio 进程中将 userId 添加到连接时的套接字,然后在另一个进程中通过 userId 找到该套接字?

任何人都有实施这样的经验?

0 投票
1 回答
1275 浏览

node.js - 无法使用 nodejs 从 socket.io-redis 获取数据

希望你一切顺利,

由于我正在创建多人游戏,所以我需要从套接字存储所有用户详细信息,一段时间后我需要从用户列表中创建一个组。

所以我尝试实现 https://github.com/socketio/socket.io-redis库并尝试获取所有连接的用户但它不起作用,我根据这个示例开发了使用 socket.io-redis 的示例,但是它对我不起作用,我的 redis 服务器运行良好。

谢谢

例子 :

index.js

索引.html

输出

用户已在无法从 redis 获取数据的房间中加入会话,如您在屏幕截图中所见

以上代码的输出

0 投票
2 回答
2496 浏览

javascript - socket.io 和 socket.io-redis:获取房间中的所有套接字对象

我想检索一个房间中连接的服务器端所有套接字。

我发现clients如果在方法之后链接in返回房间中连接的所有套接字的方法:

但我需要检索所有套接字会话/握手。

有一种方法可以检索所有套接字会话/握手吗?

旁注:套接字服务器是带有 socket.io-redis 的多实例/节点

  • 套接字.io:2.3.0
  • socket.io-redis: 5.2.0
0 投票
1 回答
243 浏览

node.js - Socket.io-redis 作为适配器添加到 Socket.io 实例时会出错

我正在尝试使用 Socket.io 和 Socket.Io-redis。我已经启动并运行了我的 Redis 服务器。我在启动 Socket.Io 服务器时遇到的错误是:ReplyError: ERR unknown command 'pubsub' 我不知道为什么我会收到这个错误。

我使用的 Redis 版本是 2.4.5

0 投票
0 回答
404 浏览

node.js - Nginx Socket.io nodejs内存泄漏

我们使用 nodejs(express) 和 nginx,当我们打开 socket.io 时,内存使用量增加得太快,并且在 1 小时 + 1GB 内没有下降,一天内存泄漏 12GB,我的服务器冻结了。我试图关闭socket.io,它开始正常工作,内存看起来还可以。我找不到问题是什么,你们可以看看吗?

在此处输入图像描述

Nginx 配置:

网站配置:

服务器 :

0 投票
0 回答
48 浏览

node.js - 延迟将消息发送到节点 js 服务器中的 Socket

当我从客户端发送消息时,大约需要 6 到 10 秒才能到达服务器。假设我发送消息的时间是 07:30:10 它在节点服务器中的接收时间是 07:30:16。请帮我找出背后的原因。

我有如下代码

0 投票
1 回答
55 浏览

node.js - 如果节点关闭,如何在多个节点上处理 socketio

我正在尝试在多个节点上设置 socketio 以实现它们之间的负载平衡。我在 socketio 文档中想出了类似的东西:Using multiple nodes

它非常适合在多个节点之间通过 redis 传递的事件,但问题是,例如,我有这种情况:

我使用负载平衡器 (nginx) 启动并运行服务器 A 和服务器 B

客户端 A 连接到服务器 A。

客户端 B 连接到服务器 B。

有什么方法可以确保服务器 A 关闭(节点断开连接,或因任何原因关闭)所有连接到服务器 A 的客户端都应该自动重定向到服务器 B 作为后备?socketio 支持吗?我必须做哪些手动配置才能确保发生这种情况?

我正在将 Express 与 nginx 一起使用。

0 投票
1 回答
36 浏览

node.js - 如何扩展涉及许多 2 人聊天室的应用程序?

现在我有一个文字游戏,用户随机配对并互相发送消息。我正在使用 Node.js 和 Socket.io。基本上,我将 socket.id 存储为用户对象的键。属性之一是其合作伙伴的 socket.id。因此,当有人发送消息时,我有逻辑找到该用户并获取他们的合作伙伴 socket.id,然后我将消息发送到那个特定的 socket.id。

但是,当我在 NGINX 或其他负载均衡器后面有多个 Node 实例时,这将不起作用。我研究过使用 Redis 之类的工具,但是我发现的每个示例都涉及跨实例向用户发送相同的消息。我不会在多个实例中向成千上万的人发送相同的消息。我只是在两个人之间发送消息,但是这些小聊天室中的许多都需要存在。如果两个用户因为位于不同的 Node 实例上而无法配对怎么办?即便如此,我觉得我不应该将每条消息都发送到 Node 的每个实例,并且在所有实例上什么都不做,除了合作伙伴连接的那个实例。

任何有关解决此类问题的信息将不胜感激。

0 投票
1 回答
980 浏览

node.js - socket.io + socket.io-redis 适配器方法调用超时

我最近从 Socket.io 2.x 升级到 3.0.3 并将它与 socket-io-redis@6.0.1 一起使用。

根据原始迁移文档中的解释,我正在尝试获取所有打开套接字的列表:

这会导致以下错误:

请注意,只有少数客户端连接到我的开发环境,因此它试图处理太多可能导致超时的数据。

当我尝试在下面运行时,我得到了同样的错误:

如果有人对导致问题的原因以及如何解决问题有任何想法,将不胜感激。

最好的

H

0 投票
1 回答
5383 浏览

php - Laravel Echo Server、Redis、Socket.IO:似乎无法让它们工作

我正在使用 Laravel 开发实时应用程序。由于我不想使用 Pusher,我正在尝试使用Laravel Echo Server、Redis 和 Socket.IO 使 websockets 工作。但是,我遇到了这个堆栈的问题。客户端(浏览器)似乎无法从事件中接收数据。我还在前端使用 Intertia 和 Vue。还值得注意的是,我使用Laragon作为我的本地开发环境。

我的.env,有些被省略了:

我的laravel-echo-server.json

我的 redis 配置database.php:注意:我使用它是因为即使我在 PHP 扩展上安装了 dll,我predis似乎也无法工作。phpredis

我的 Laravel 活动:

我的回声初始化在bootstrap.js

在订阅 Echo 服务器的 Vue 页面上

运行这 3 个命令:

  1. laravel-echo-server start
  2. npm run watch
  3. php artisan queue:work

我尝试使用 Tinker 和 GET 请求广播事件。

队列工作者处理事件;

laravel-echo-server在广播事件时输出;

客户端没有显示任何错误。以下是开发者控制台上的网络选项卡:

浏览器网络选项卡

当我关闭laravel-echo-server客户端仍然打开时,每隔一秒就会发生此错误:

ERR_CONNECTION_REFUSED

抱歉这个冗长的问题,我只需要显示我的所有配置,以便我可以帮助您解决这个问题。谁能指出我正确的解决方案?谢谢!