2017-03-13 29 views
7

Socket based event push architecture 我有写在节点JS套接字服务器应用程序,托管在亚马逊EBS(弹性豆秆),这是由负载平衡器插槽IO上ELB,需要连接到应用服务器的所有实例

客户管理连接到套接字并传递指定的ID,例如event_id,我的应用程序创建名为“event_ event_id”的房间并加入房间。不同的客户有不同的“事项标识”

lambda函数连接到插座并发出名为“event_push”事件到应用程序与诸如事项标识

必要的数据每当我的套接字应用程序(在例子中的一个EBS)检测与event_id推的事件,它播出的推数据到房间“event_ event_id”的所有成员,因此所有成员得到通知,该事件的

客户端可以连接任何服务器,通过负载均衡,并决定粘性会话可以保持连接

现在我的问题: 有没有办法发出了“event_push”只能有一个名为“event_ event_id

QN室服务器:有没有一种方法来发射事件在服务器上的所有实例EBS? 或 问题:是否有其他解决方案?

+0

可能的解决方案:可以具有可以接收事件详细信息的持久连接的中央订阅/发布服务器。套接字服务器可以订阅中央服务器,以便在发生事件时通过持久连接将其推送到所有订阅的套接字服务器。 – Ima

回答

0

你可以做的是你可以使用Redis或mongoDb来保存一些关于你的事件event_event_id的信息。您可以保存在数据存储这些信息,例如样本文档

{ 
    _id : ObjectId, 
    userId : 23, 
    event : event_event_id, 
    server : 1 
}, 
{ 
    _id : ObjectId, 
    userId : 23, 
    event : event_event_id, 
    server : 2 
} 

现在这是什么会做的是你将有哪些事件属于哪个服务器的信息。现在,如果负载均衡器将server1的请求发送到服务器2,并且服务器2不能识别该请求,则可以在服务器之间创建通信通道(可以使用socketio,microservice或其他任何方式),并将该请求重定向到服务器1,以便它可以触发该特定的套接字事件。

当触发断开连接事件时,您必须从mongo或redis中删除套接字ID。

+0

1.我的服务器由Elastic Bean Stalk启动,您永远不会知道哪个服务器启动,哪个服务器关闭,或者新服务器初始化时。因此,在这种情况下,服务器之间的通信毫无疑问。 – Ima

+0

2.您永远不会知道哪个用户连接到哪个服务器,这是关于从浏览器到服务器的套接字连接,连接是持久的,并且由于2个原因,客户端(浏览器)无法建立与特定服务器的连接。 a)服务器总是没有启动,但由EBS管理,客户端(浏览器)没有关于服务器的任何信息。 b)连接由弹性负载均衡器(ELB) – Ima

+0

确定。事件不限于任何用户或任何其他实体,因此我不能按照您的建议进行绑定。 – Ima

相关问题