【问题标题】:Building a web application using WebSockets and AWS使用 WebSockets 和 AWS 构建 Web 应用程序
【发布时间】:2017-06-10 19:57:18
【问题描述】:

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

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

选项 1

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

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


选项 2

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

问题:因为每台服务器都有自己的一组连接的客户端,它无法将更改推送到连接到另一台服务器的客户端。


备注

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

相关帖子

IoT request response protocol

感谢您在这个问题上给我的任何想法。

【问题讨论】:

  • 我在 Elastic Beanstalk 上运行了一个 websockets 应用程序(修改了 nginx.conf 以支持它)并且在部署时遇到了类似的问题。由于 websocket 的持久性,我们最终使用了一个集群的 akka 实例来发布消息。在部署时,我们会向 JS 客户端推送一条消息,指示它重新连接。对您提出的解决方案非常感兴趣,因为我们的解决方案并不完美。
  • 感谢您让我注意到 EBS 和 Akka(我也不知道)。你能画出你最终得到的架构吗?您是否能够以请求-响应方式工作,同时能够发布到所有客户端(即使连接到不同的服务器)?
  • 旁注:Elastic Beanstalk 实际上只是“EB”。 EBS 是 Elastic Block Store 的首字母缩写。
  • 我猜,AWS IoT 并没有按照您的想法运行。您的客户端将消息发布到 IoT 主题。物联网规则订阅物联网主题(例如项目/+)并可以采取诸如调用 lambda 函数(docs.aws.amazon.com/iot/latest/developerguide/…)之类的操作。但没有直接与 EC2 实例对话的操作。在 AWS IoT 中,无法直接订阅主题。只有 IoT 规则可以订阅和触发操作。除此之外,我还可以为 Websocket 应用推荐 IoT 服务。
  • 感谢您提供宝贵的信息。不过,这与文档所说的不一致:"The message broker uses topics to route messages from publishing clients to subscribing clients." 你知道任何类似的服务可以让我实现上述目标吗?

标签: amazon-web-services web-applications amazon-ec2 websocket


【解决方案1】:

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

它的工作原理如下:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-14
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多