node.js socket io redis pub/sub not emiting事件

eufgjt7s  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(342)

我正在进行以下设置:
两台服务器,b和c在同一台主机上。
客户端a可以访问服务器b。服务器c只能从特定的ip范围访问,客户端a不应该访问它。
现在,服务器b有一个基于socket.io的聊天室-当客户端向这个聊天室发送消息时,我将这个消息添加到mongo,并将消息广播回客户端,这样它就会出现在他的网页上。
现在我必须做的是,当客户端在服务器b聊天室中发送消息时,在服务器端我必须将此消息传输到服务器c,服务器c的私有客户端也通过socket.io连接到服务器c的聊天室,因此当客户端a写入服务器b时,他们应该在网页上接收来自服务器c的消息,反之亦然。当服务器c的私有客户端向服务器c发送消息聊天时,它应该被传输到b,b应该将它传输到连接的用户(通过用户名)。
我试着通过 socket.io-redis 模块,我安装了redis并启动了它,然后我使用了如下代码:
服务器b:

const sharedsession = require("express-socket.io-session");
app.set('port', '3000');

    /**
     * Create HTTP server.
     */

    var server = http.createServer(app);

    var io = require('socket.io')(server,{
      transports: ['polling']
    });
    const redisAdapter = require('socket.io-redis');
    const Redis = require('ioredis');

    const startupNodes = [
      {
        port: 6379,
        host: 'localhost'
      }
    ];

    io.adapter(redisAdapter({
      pubClient: new Redis(startupNodes),
      subClient: new Redis(startupNodes)
    }));

    io.use(sharedsession(sess));
    io.emit('hi!','text');

服务器c:

const sharedsession = require("express-socket.io-session");
app.set('port', '3002');

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

var io = require('socket.io')(server,{
  transports: ['polling']
});
const redisAdapter = require('socket.io-redis');
const Redis = require('ioredis');

const startupNodes = [
  {
    port: 6379,
    host: 'localhost'
  }
];

io.adapter(redisAdapter({
  pubClient: new Redis(startupNodes),
  subClient: new Redis(startupNodes)
}));

io.use(sharedsession(sess));
io.on('hi!',function(txt) {
   console.log(txt);
});
io.on('connection',function(socket){
    socket.on('hi!',function(txt) {
         console.log(txt);
    });
});

我先启动服务器c,然后启动服务器b。据我所知,我应该被击中 io.on('hi!',function(txt) 但这不是出于某种原因。我的错误在哪里?有人能帮忙吗?如何使用socketio和redis连接localhost上的两个服务器应用程序?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题