Ima*_*Ima 7 sockets amazon-ebs node.js socket.io
我有一个在节点js上编写的套接字服务器应用程序,托管在Amazon EBS(Elastic bean stalk)上,由负载均衡器管理
客户端连接到套接字并传递指定的id,比如event_id我的应用程序创建名为"event_ event_id"的房间并加入房间.不同的客户有不同的"event_id"
lambda函数连接到套接字并向应用程序发出名为"event_push"的事件,并使用必要的数据(如event_id)
每当我的套接字应用程序(在EBS中的一个实例中)检测到推送事件时event_id,它将推送的数据广播到房间的所有成员"event_ event_id",因此所有成员都会收到有关该事件的通知
客户端可以连接任何服务器,由负载均衡器和粘性会话决定可以保持连接
现在我的问题:有没有办法发出了"event_push",只为服务器已经命名为"event_的房间event_id"
问:有没有办法向EBS中的所有服务器实例发送事件?或Qn:还有其他解决方案吗?
您可以做的是使用 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
}
Run Code Online (Sandbox Code Playgroud)
现在,您将获得哪个事件属于哪个服务器的信息。现在,如果负载均衡器将服务器 1 的请求发送到服务器 2 并且服务器 2 无法识别该请求,您可以在服务器之间创建一个通信通道(您可以使用 socketio、微服务或任何东西)并将该请求重定向到服务器 1,以便它可以触发该特定套接字事件。
当触发断开事件时,您必须从 mongo 或 redis 中删除套接字 id。
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |