我需要让两个不同的socket.io服务器相互通信。我不能使用socket.io-client
,因为它不区分browser to server
连接和server to server
连接。所以我尝试使用socket.io-redis
。
一个是express-socket.io服务器,另一个是独立的socket.io服务器。两者都已配置为使用socket.io-redis
适配器。我没有看到Server1从Server2收到消息也没有错误。
伺服器1:
var express = require('express');
var app = express();
var server = app.listen(8000,function () {
console.log('server listening at port 8000');
});
var io = require('socket.io')(server);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
io.on('message',function (message) {
console.log(message);
});
io.on('connection',function (socket) {
console.log('connection');
socket.on('message',function (message) {
console.log(message);
});
});
字符串
服务器2:
var io = require('socket.io')(3000);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));
io.emit('message','Hi');
型
2条答案
按热度按时间pw136qt21#
socket.io-redis将不允许您从一个服务器捕获另一个服务器上的事件。它的工作原理是,它将简单地“推送”由一个服务器发出的消息到其他连接的服务器,这样这些服务器就可以发出这些消息。
如果示例A将接收事件(即
io.on('connect')
),您将无法在示例B上捕获该事件。但是,您将能够向连接到所有示例的所有客户端发出一条消息,只需调用字符串
通过这种方式,您将把消息广播到所有客户端,无论是连接到示例A还是B(也包括您自己)。这种方法允许您将应用程序扩展到一台机器上的其他示例(利用多个线程)或其他服务器。
如果你需要你的服务器互相“交谈”,你可以利用你现有的传输层- Express服务器。您可以为不同类型的请求创建处理程序,例如:
型
通过这种方式,您可以在www.example.com示例之间交换信息socket.io,更改它们的状态,使所有示例报告使用情况等。要记住的事情-验证请求;你不想收到未经授权的用户的电话:)
pbgvytdp2#
如果有人在2023年仍在寻找答案,在SocketIO集群中,您可以使用serverSideEmit从一台服务器到另一台服务器进行通信,因为它直接与同一集群中的其他服务器进行通信:
向群集的其他Socket.IO服务器发送消息。
请注意,此功能是在v4.1.0中添加的。此外,它也值得看看v4.6.0中添加的serverSideEmitWithAck。