我正在进行以下设置:
两台服务器,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上的两个服务器应用程序?
暂无答案!
目前还没有任何答案,快来回答吧!