У меня следующие настройки:
Два сервера B и C на одном хосте.
Клиент A имеет доступ к серверу B. Сервер C может быть доступ осуществляется только с определенных диапазонов IP-адресов, и клиент A не должен иметь к нему доступа.
Теперь сервер B использует чат на основе socket.io - когда клиент отправляет сообщение в этот чат, я добавляю это сообщение mon go и передайте сообщение обратно клиенту, чтобы оно появилось на его веб-странице.
Теперь я должен сделать следующее: когда клиент отправляет сообщение в чате B на стороне сервера. я должен передать это сообщение на сервер C, частные клиенты сервера C также подключены к чату сервера C через socket.io, поэтому, когда клиент A пишет на сервер B, он должен получить сообщение от сервера C на веб-странице и наоборот. Когда частный клиент сервера C отправляет сообщение на сервер C chat, оно должно передаваться B, а B должно передавать его подключенному пользователю (по имени пользователя).
Я пытался сделать это через модуль socket.io-redis
, что я сделал, я установил Redis и запустил его, затем я использовал такой код:
SERVER 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');
SERVER 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)
, но по какой-то причине этого не происходит. Где моя ошибка, может кто-то помочь, как соединить два серверных приложения на localhost, используя socketio и redis?