使用WebSockets和AWS构建Web应用程序

Dou*_*e M 6 web-applications amazon-ec2 amazon-web-services websocket

我正在尝试创建一个协作Web应用程序,其中多个用户可以在各种(共享)项目上一起工作.到目前为止,我有一个JavaScript客户端和一个本地jWebSocket服务器.

为了在部署时保持可扩展性,我想到了两个选择:

选项1

我可以使用AWS IoT而不是多个jWebSocket服务器.发布项目的变更很容易,我只需要发布到例如/project/{project-id}.但传统的请求 - 响应机制将如何运作?

选项1的草图

问题:通过发布到不同的主题(例如/server/1),可以访问EC2实例处理请求.但是当JS客户端连接到AWS IoT时,它不知道发送请求的任何EC2实例.我如何将每个客户端分配给实例/主题?


选项2

AWS Application Load Balancer后面的多个EC2实例上运行jWebSocket服务器.平衡器只是将每个客户端分配给服务器,传统的请求 - 响应流程不会成为问题.但推动变革怎么样?

选项2的草图

问题:因为每个服务器都有自己的连接客户端集,所以它无法将更改推送到连接到另一个服务器的客户端.


备注

  • 混合使用jWebSocket向AWS IoT发送请求以接收事件似乎是一个草率的解决方案.
  • 我假设我可以通过编程方式调整每个cognito身份的IoT策略,以允许/拒绝对特定项目的订阅.
  • 由于Lambda引入了高延迟,因此使用AWS Lambda并完全放弃服务器是不可取的(如果您有不同的体验,请分享).

相关文章

物联网请求响应协议

感谢你能在这个问题上给我的任何想法.

Dou*_*e M 0

我懂了。这个问题的第一个建议为我指明了正确的方向。该解决方案允许所有客户端保持WebSocket与最初连接的服务器的直接连接,而无需订阅特定主题。

服务器将未知客户端的消息推送到负责的服务器。

其工作原理如下:

  1. 当客户端连接到服务器时,服务器订阅客户端的频道
  2. 如果服务器需要向未连接的客户端发送消息,则会将该消息发布到客户端的通道
  3. (您猜对了)订阅频道的服务器可以代表第一个服务器处理消息

图中的“Pusher”描述了这种 SaaS,但当然可以用任何其他消息服务来代替。