0

我正在尝试为 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 后应该可用的所有其他功能都是未定义的。我的配置如下。

const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server, {transports: ['websocket']});
const redisAdapter = require('socket.io-redis');
io.adapter(redisAdapter({port: 6379, host: '127.0.0.1'}));

在应该是简单的配置中,我找不到任何其他困难的情况。我正在使用socket.io 2.3.0并且socket.io-redis 5.4.0根据文档应该兼容。

4

1 回答 1

0

在 Kubernetes 集群上部署 Socket.IO 应用程序时,这意味着多个 SocketIO 服务器(Pod),需要注意两件事:

  • 启用粘性会话功能: 当请求来自 SocketIO 客户端(浏览器)到您的应用程序时,它会与特定的会话 ID 相关联,这些请求必须与发起其 ID 的同一进程(Kubernetes 中的 Pod)保持连接.
  • 使用 Redis 适配器

您可以从这个 Medium 故事(提供源代码)中了解更多信息

于 2021-01-28T15:06:51.103 回答