Node.js Socket io Redis发布/订阅未发出事件

时间:2020-02-19 23:42:40

标签: node.js redis socket.io

我正在进行以下设置:

两个服务器B和C位于同一主机上。

客户端A可以访问服务器B。只能从某些IP范围访问服务器C,而客户端A则不能访问服务器。

现在,服务器B具有基于socket.io的聊天功能-当客户端向该聊天发送消息时,我将此消息添加到mongo并将消息广播回客户端,因此它将显示在他的网页上。

现在我要做的是,当客户端在服务器B聊天中发送消息时,在服务器端我必须将此消息传输到服务器C,服务器C的专用客户端通过套接字连接到服务器C的聊天。同样,因此,当客户端A向服务器B进行写操作时,他们应该在网页上从服务器C接收一条消息,反之亦然。当服务器C的私有客户端向服务器C聊天发送消息时,它应该被发送到B,并且B应该将其发送到所连接的用户(通过username)。

我尝试通过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在本地主机上连接两个服务器应用程序?

0 个答案:

没有答案