Node.js 如何使用socket.io-redis将消息发送到另一个socket.io服务器?

Node.js 如何使用socket.io-redis将消息发送到另一个socket.io服务器?,node.js,websocket,socket.io,socket.io-redis,Node.js,Websocket,Socket.io,Socket.io Redis,我需要两个不同的socket.io服务器相互通信。我无法使用socket.io客户端,因为它不区分浏览器到服务器连接和服务器到服务器连接。所以我尝试使用socket.ioredis 一个是express-socket.io服务器,另一个是独立的socket.io服务器。两者都配置为使用socket.io redis适配器。我没有看到服务器1从服务器2接收到消息。也没有错误 服务器1: var express=require('express'); var-app=express(); var s

我需要两个不同的socket.io服务器相互通信。我无法使用
socket.io客户端
,因为它不区分
浏览器到服务器
连接和
服务器到服务器
连接。所以我尝试使用
socket.ioredis

一个是express-socket.io服务器,另一个是独立的socket.io服务器。两者都配置为使用
socket.io redis
适配器。我没有看到服务器1从服务器2接收到消息。也没有错误

服务器1:
var express=require('express');
var-app=express();
var server=app.listen(8000,函数(){
log('服务器在端口8000侦听');
});
var io=require('socket.io')(服务器);
var redis=require('socket.io redis');
适配器(redis({host:'localhost',端口:6379}));
io.on('message',函数(message){
控制台日志(消息);
});
io.on('连接',函数(套接字){
console.log('connection');
socket.on('message',函数(message){
控制台日志(消息);
});

});socket.io-redis将不允许您从一台服务器捕获另一台服务器上的事件。它的工作原理是将一台服务器发送的消息“推送”到其他连接的服务器,这样这些服务器就可以将这些消息发送到其他服务器

如果实例A将接收一个事件(即('connect')
),您将无法在实例B上捕获该事件。但是,只需调用

socket.on('message', function(socket){
   socket.emit('hello', 'New message');
}
这样,您将向所有连接到实例A或实例B(包括您自己)的客户端广播消息。这种方法允许您将应用程序扩展到一台机器上的其他实例(使用多个线程)或其他服务器

如果您需要您的服务器彼此“对话”,您可以利用现有的传输层Express服务器。您可以为不同类型的请求创建处理程序,例如:

app.get('/api/clientCount', function(req, res){
  res.send(io.engine.clientsCount);
});

通过这种方式,您可以在socket.io实例之间交换信息,更改它们的状态,让所有实例报告使用情况,等等。要记住的事情是:验证请求;你不想从未经授权的用户那里得到这些呼叫:)

你检查过redis商店的事件记录是否正确吗?@cdagli你能看一下吗?我从你的用户描述中看到你有一些socket.io经验:)。科瓦尔在右下方吗?我无法使用socket.io-redis与服务器进行通信?