问题标签 [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 - Socket.io-redis 配置不起作用
我正在尝试为 kubernetes 部署设置 socket.io-redis,但配置有问题。它部分工作,因为我可以在 redis 中看到 socket.io 消息 using redis-cli PSUBSCRIBE
,但我无权访问任何 socket.io-redis 的功能。
io.of('/').adapter.sockets()
,io.of('/').adapter.allRooms()
并且在成功配置 socket.io-redis 后应该可用的所有其他功能都是未定义的。我的配置如下。
在应该是简单的配置中,我找不到任何其他困难的情况。我正在使用socket.io 2.3.0
并且socket.io-redis 5.4.0
根据文档应该兼容。
websocket - 房间里的 Socket Ids 不稳定
当客户端最初加入房间几秒钟时,他们可以交谈,但几秒钟后客户端 1 套接字 id 突然从房间中退出并获得新的套接字 id。
在那之后,第二个客户端的套接字 id 突然下降,并提出了新的 id。
因此,房间客户端存在不稳定,无法在应用程序中进行通信。
我们正在使用 socket.io 适配器 5.4.0v 来解决这个问题,有人可以帮忙吗?
node.js - 考虑到 k8s,如何让两个后端 nodejs 服务器相互通信以处理不同的任务
我有一个处理所有身份验证的快速服务器(使用令牌身份验证并有 redis 存储会话来控制每个设备的登录数量)和读/写 mongoDB。
我想为我的用户添加聊天(使用 socket.io 和 socket.io-redis),而不是在当前后端对其进行编码,我想知道如何将它分开,或者这是否是一个好主意。
我认为这是因为我正在部署在 k8s 集群上,但我想知道如何在这两个服务器之间进行通信。
我正在使用入口 nginx 控制器,在该控制器中,我在负载均衡器中打开了到后端的流量。起初我以为我会在聊天服务器和用户之间路由来自后端的所有流量。但情况并非如此,因为聊天服务器需要直接连接到用户?那么如何保护后端与聊天服务器之间的通信以及聊天服务器与用户之间的通信呢?
也许我想太多了,但任何见解都值得赞赏。
node.js - 使用redis适配器连接时Socket.io返回回调错误
我使用 socket.io 创建了一个 WebSocket 服务器。我有以下代码
但是在不同的集群上部署我的服务器后,我没有正确地在客户端中获取消息。
因此,我使用 socket.io-redis 库添加了一个 Redis 适配器。
尝试从服务器向客户端发送消息时出现错误。
http://localhost:3000/socketTest?roomname=testRoom1
关于这个错误的任何想法?有什么我错过的吗?
nginx - Websocket 传输关闭(EC2+NGINX+PM2 Cluster+Redis)在一定时间后
我在使用 socket.io 版本 3 时遇到了一个奇怪的问题。我试图transports:["websocket"]
只使用它来避免轮询。我当前的设置是一个 EC2 实例作为我的服务器,NGINX 具有这些设置:
和:
我的服务器在集群模式下使用 PM2 运行,我使用 Redis 适配器如下:
我的客户端也使用相同版本的 socket.io 并且只有 websockets。几天后一切正常,但使用 3-4 天后,由于传输关闭原因,套接字将不再连接。一开始我以为是我的 Redis DB 满了,但事实并非如此,它甚至还没有满。重新启动服务器后,它再次工作。我认为这是某种缺失的设置,但我找不到。我的 pingTimeout 是 5000,而 pingInterval 是 25000。
node.js - SocketIO 存在系统 Redis
我正在使用带有 Redis 的 Socket.IO 和负载平衡实例构建一个用于实时流式传输的存在系统。每次用户进入房间时,我都会向服务器发送 socket.emit('join', roomId) 并且服务器将用户加入相应的房间。每分钟,我都会刷新仪表板,并使用这样的 redis 适配器让所有用户连接到实例:
如果我的一台服务器出现故障,Redis 会自动删除所有连接的套接字,并几乎立即刷新该房间中的套接字数量。
现在的问题:每当用户连接时,我都会打电话
用于设置用户在线。
当用户断开连接时,我会
问题是……如果我的服务器出现了一段时间的宕机,用户将永远被标记为在线。看到我有超过 20,000 人在线,几乎不可能每分钟向服务器发送一个使用 LastSeen 更新数据库的请求,因为这会导致超过 300 次写入/秒(我认为 mongodb 不会处理,会它 ?)
有什么方法可以解决这个问题吗?使用redis存储一些数据,以防服务器离线一段时间,我恢复上一个状态?怎么会这样?
有什么解决方案吗?即使socketio重试重连,如果服务器离线1分钟,用户离开,他将永远在线。
谢谢你 !
queue - 如何调试 laravel-echo-server?Laravel 8 Redis 广播
创建事件并将其发送到 Redis 后,我尝试订阅该事件并通过 Vue 组件中的 socket.io 向 laravel-echo-server 发出请求。
我用命令启动了 laravel-echo-server
另外,我开始排队。
和 Laravel 开发服务器。
提交表单后,redis-monitor 显示事件已生成并到达 Redis 服务器,但我在 Firefox 浏览器中得到响应。
并且消息不会发送给订阅的客户
我怎样才能解决这个问题?
node.js - 如何访问所有集群中的套接字会话
我正在使用 PM2 在集群模式下设置 socket.io。
我正在使用socket.io-redis
包,它在集群模式下工作正常。
但是当我想访问所有连接的套接字时,问题就出现了。因为进程不知道集群模式下其他进程中的套接字连接。
我认为socket.io-redis
跟踪所有连接的套接字及其所有会话信息,但事实并非如此。是否有任何方法或解决方案可以访问 socket.io/Nodejs 中所有进程中存在的所有套接字连接?
node.js - 套接字 io 在服务器端(GKE)没有连接事件的情况下连接
我在 GKE 中部署了一个基于 Socket.io 的应用程序。我已经使用 Redis 适配器来处理多个 pod。Ingress 设置中已经设置了 Cookie 关联性。
我使用动态命名空间。我在 GKE 上只使用 1 个 POD。当我从 1 个 pod 扩展到 0 个 pod,然后再扩展到 1 个 pod 时,反复进行,有时 socket.io 工作,有时它不起作用。当它不起作用时,这是我观察到的非常奇怪的行为:
- 在服务器端未触发连接事件时,尽管套接字已连接,但事件。我知道套接字已经连接,因为我打印了所有这些。
我怀疑 Redis 适配器?有人见过这个吗?
谢谢!
node.js - redis节点之间的Socket.io fetchSockets()错误
我们在 socket.io redis 节点中使用server.fetchSockets()时遇到问题。当服务器调用此函数时,其他服务器将抛出此异常:
C:\path\node_modules\socket.io-redis\dist\index.js:212 响应 = JSON.stringify({ ^
TypeError: 将循环结构转换为 JSON --> 从具有构造函数“Pool”的对象开始 | 属性 'config' -> 带有构造函数 'PoolConfig' 的对象 | 属性 'connectionConfig' -> 带有构造函数 'ConnectionConfig' 的对象 --- 属性 'pool' 在 RedisAdapter.onrequest (C:\Users\pach\Documents\trace Gaming\new\node\node_modules \socket.io-redis\dist\index.js:212:33) 在 processTicksAndRejections (node:internal/process/task_queues:94:5)
并且调用该函数的服务器超时。
发送和接收事件工作正常。
套接字.io 4.1.1 套接字.io-redis 6.1.1