我正在进行以下设置:
两个服务器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在本地主机上连接两个服务器应用程序?