ELB上的套接字io需要连接到应用程序服务器的所有实例

基于Socket的事件推送架构 我有一个套接字服务器应用程序写在节点js上,托pipe在Amazon EBS(Elastic bean stalk)上,由负载平衡器

客户端连接到套接字并传递指定的ID,说event_id我的应用程序创build名称为“event_ event_id ”的房间,并join房间。 不同的客户有不同的“event_id”

一个lambda函数连接到套接字,并向应用程序发出一个名为“event_push”的事件,其中包含必要的数据,如event_id

每当我的套接字应用程序(在EBS中的一个实例中)检测到带有event_id的推送事件时,它就将推送的event_id广播给房间的所有成员“event_ event_id ”,从而所有成员得到事件的通知

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

现在我的问题:有没有办法发出“event_push”只有服务器有一个房间名为“event_ event_id

Qn:有没有办法将事件发送到EBS中的所有服务器实例? 或Qn:有没有其他解决scheme?

你可以做的是你可以使用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 } 

现在将会做的是你将得到哪个事件属于哪个服务器的信息。 现在,如果loadbalancer向服务器2发送服务器1的请求,而服务器2不能识别该请求,则可以在服务器之间创build通信通道(可以使用socketio,microservice或其他任何方式),并将该请求redirect到服务器1,以便可以触发该特定的套接字事件。

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