繁体   English   中英

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

[英]How do I send message to another socket.io server using socket.io-redis?

我需要有两个不同的socket.io服务器相互通信。 我不能使用socket.io-client因为它不区分browser to server连接和server to server连接。 所以我试图使用socket.io-redis

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

Server1:

 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'); 

socket.io-redis不允许您从一个服务器捕获另一个服务器上的事件。 它是如何工作的,它只是将一台服务器发出的消息“推送”到其他连接的服务器,因此可以将这些消息发送到。

如果实例A将收到一个事件(即io.on('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实例之间交换信息,更改其状态,使所有实例报告使用情况等。要记住 - 验证请求; 您不希望未经授权的用户接到这些电话:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM