问题标签 [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.
node.js - 如何在由 socketio-redis 管理的 socketio 进程集群中找到用户套接字
我是 socketio-redis 适配器的新手。最初我有一个 socketio 进程,但现在尝试使用 socketio 集群。
当它是一个进程时,我会维护一个已连接套接字的映射,以通过 userId 找到一个套接字。当用户 A 发射到房间时,如果用户 B 已连接但尚未进入房间,则 B 的套接字被找到并加入了该房间。然后A的插座发射到房间。
我的问题是,如何使用 socketio-redis 来解决这个问题?
下面是一个简化的计划。是否可以在一个 socketio 进程中将 userId 添加到连接时的套接字,然后在另一个进程中通过 userId 找到该套接字?
任何人都有实施这样的经验?
node.js - 无法使用 nodejs 从 socket.io-redis 获取数据
希望你一切顺利,
由于我正在创建多人游戏,所以我需要从套接字存储所有用户详细信息,一段时间后我需要从用户列表中创建一个组。
所以我尝试实现 https://github.com/socketio/socket.io-redis库并尝试获取所有连接的用户但它不起作用,我根据这个示例开发了使用 socket.io-redis 的示例,但是它对我不起作用,我的 redis 服务器运行良好。
谢谢
例子 :
index.js
索引.html
输出
用户已在无法从 redis 获取数据的房间中加入会话,如您在屏幕截图中所见
javascript - socket.io 和 socket.io-redis:获取房间中的所有套接字对象
我想检索一个房间中连接的服务器端所有套接字。
我发现clients
如果在方法之后链接in
返回房间中连接的所有套接字的方法:
但我需要检索所有套接字会话/握手。
有一种方法可以检索所有套接字会话/握手吗?
旁注:套接字服务器是带有 socket.io-redis 的多实例/节点
- 套接字.io:2.3.0
- socket.io-redis: 5.2.0
node.js - Socket.io-redis 作为适配器添加到 Socket.io 实例时会出错
我正在尝试使用 Socket.io 和 Socket.Io-redis。我已经启动并运行了我的 Redis 服务器。我在启动 Socket.Io 服务器时遇到的错误是:ReplyError: ERR unknown command 'pubsub' 我不知道为什么我会收到这个错误。
我使用的 Redis 版本是 2.4.5
node.js - 延迟将消息发送到节点 js 服务器中的 Socket
当我从客户端发送消息时,大约需要 6 到 10 秒才能到达服务器。假设我发送消息的时间是 07:30:10 它在节点服务器中的接收时间是 07:30:16。请帮我找出背后的原因。
我有如下代码
node.js - 如果节点关闭,如何在多个节点上处理 socketio
我正在尝试在多个节点上设置 socketio 以实现它们之间的负载平衡。我在 socketio 文档中想出了类似的东西:Using multiple nodes。
它非常适合在多个节点之间通过 redis 传递的事件,但问题是,例如,我有这种情况:
我使用负载平衡器 (nginx) 启动并运行服务器 A 和服务器 B
客户端 A 连接到服务器 A。
客户端 B 连接到服务器 B。
有什么方法可以确保服务器 A 关闭(节点断开连接,或因任何原因关闭)所有连接到服务器 A 的客户端都应该自动重定向到服务器 B 作为后备?socketio 支持吗?我必须做哪些手动配置才能确保发生这种情况?
我正在将 Express 与 nginx 一起使用。
node.js - 如何扩展涉及许多 2 人聊天室的应用程序?
现在我有一个文字游戏,用户随机配对并互相发送消息。我正在使用 Node.js 和 Socket.io。基本上,我将 socket.id 存储为用户对象的键。属性之一是其合作伙伴的 socket.id。因此,当有人发送消息时,我有逻辑找到该用户并获取他们的合作伙伴 socket.id,然后我将消息发送到那个特定的 socket.id。
但是,当我在 NGINX 或其他负载均衡器后面有多个 Node 实例时,这将不起作用。我研究过使用 Redis 之类的工具,但是我发现的每个示例都涉及跨实例向用户发送相同的消息。我不会在多个实例中向成千上万的人发送相同的消息。我只是在两个人之间发送消息,但是这些小聊天室中的许多都需要存在。如果两个用户因为位于不同的 Node 实例上而无法配对怎么办?即便如此,我觉得我不应该将每条消息都发送到 Node 的每个实例,并且在所有实例上什么都不做,除了合作伙伴连接的那个实例。
任何有关解决此类问题的信息将不胜感激。
node.js - socket.io + socket.io-redis 适配器方法调用超时
我最近从 Socket.io 2.x 升级到 3.0.3 并将它与 socket-io-redis@6.0.1 一起使用。
根据原始迁移文档中的解释,我正在尝试获取所有打开套接字的列表:
这会导致以下错误:
请注意,只有少数客户端连接到我的开发环境,因此它试图处理太多可能导致超时的数据。
当我尝试在下面运行时,我得到了同样的错误:
如果有人对导致问题的原因以及如何解决问题有任何想法,将不胜感激。
最好的
H
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 个命令:
laravel-echo-server start
npm run watch
php artisan queue:work
我尝试使用 Tinker 和 GET 请求广播事件。
队列工作者处理事件;
并laravel-echo-server
在广播事件时输出;
客户端没有显示任何错误。以下是开发者控制台上的网络选项卡:
当我关闭laravel-echo-server
客户端仍然打开时,每隔一秒就会发生此错误:
抱歉这个冗长的问题,我只需要显示我的所有配置,以便我可以帮助您解决这个问题。谁能指出我正确的解决方案?谢谢!