2017-06-18 56 views
1

我正在开发一个网站,我将使用微服务。什么是使用Socket.io运行多个服务的最佳方式

我将有一个或多个Node.js应用程序使用Socket.io。

我想弄清楚我将如何构建这个。

我可以使用多个Node.js与Socket.io连接到用户,还是会遇到冲突?我可以使用NGiNX作为UUID的代理来识别发送请求的微服务。这是否使感觉?有没有更好的办法?

或者我也想使用一个Node.js有一个代理接收所有的Socket.io连接,然后它创建一个与用户的连接。但是这似乎增加了网络负载,因为我添加了另一个微服务。

无论如何,我会喜欢你对此的看法。

+1

这是相当困难知道如何不理解你正在试图解决的实际问题提出意见。建筑决策是根据实际问题制定的。 “用socket.io使用微服务”没有描述这个问题,这只是一种架构策略。 – jfriend00

回答

1

根据你的项目是如何去,它可能会或可能不会是建立微服务通信在Socket.io

想到的是socket.io邮件系统的穷人保障的第一件事情是个好主意特别是您的邮件没有存储在磁盘上的事实。虽然这可能很方便,但在构建审计线索,调试或重播时,这也是一个真正的问题。

我看到的另一个问题是可伸缩性/群集能力:是的,您可以通过一个nodeJS代理进行多项服务通信,但是当您需要添加更多内容时会发生什么?你如何将消息从一个经纪人传递给另一个经纪人?这将导致你建立一个完整的消息系统,你会发现更安全的使用现有的解决方案(RabbitMQ的,卡夫卡......)

0

您可以设置多的NodeJS服务和所有的人都用socket.io- redis lib连接到Redis服务器以共享所有nodejs服务的socketID。这意味着您在Redis服务器上存储所有套接字信息。当你发出一个事件时,它们将自动发射到所有nodejs服务。

const server = require('http').createServer(); 
 
const io = require('socket.io')(server); 
 
const redis = require('socket.io-redis'); 
 
io.adapter(redis({ host: 'localhost', port: 6379 })); 
 

 
io.on('connection', socket =>{ 
 
    // put socket of user to a room name by user_id 
 
    socket.join(user_id); 
 
}); 
 

 
// emit an event to a specify user, all nodejs keep that user connection will be emit 
 
io.to(user_id).emit('hello', {key: 'ok'})

相关问题