【问题标题】:How to run socket.io on my static site on AWS如何在我的 AWS 静态站点上运行 socket.io
【发布时间】:2016-12-04 05:38:35
【问题描述】:

如果我在 AWS S3 上有一个静态站点(并且可能使用 CloudFront),那就太酷了,因为它可以轻松扩展,并且具有零停机时间部署,因为您只是在更新静态资产并分发到边缘站点,哇哦!

但是,如果我想在联系页面上使用 Socket.io 提供一点实时聊天支持功能,我将如何告诉亚马逊处理 Websockets?我可以使用 Route53 对特定域的 Websocket 请求做一些不同的事情,比如将它们重定向到 Lambda 吗? (Lambda不能运行socket.io可以吗?)

【问题讨论】:

  • 据我所知,您需要在 EC2 服务器上运行 socket.io。您将无法在 Lambda 上运行它。
  • @Costa,您找到解决此问题的方法了吗?

标签: sockets amazon-web-services amazon-s3 lambda


【解决方案1】:

与您的other question类似,这里的答案涉及DNS不参与路径解析的事实,因此Route 53不是这个问题的因素。

Socket.io 几乎肯定需要服务器,而通过 CloudFront 连接似乎不太可能。

虽然我不精通 socket.io 的底层传输协议,但我看不出有什么办法。 CloudFront 是一个反向代理,仅支持正确的标准 HTTP 请求/响应行为,不适合实时面向事件的操作。 CloudFront 不支持 websocket,尽管 Socket.io 可能不需要它们,并且可能具有回退到兼容行为的灵活性,但如果可能的话,它充其量是次优的,因为即使使用长轮询(低效),单个响应的时间限制在 30 秒以下,因为 CloudFront 有一个固定的 30 秒超时计时器,无法修改。

同样,通过 API Gateway 访问的 Lambda 函数仅适用于处理单个 HTTP 请求/响应周期,不适用于任何持久性,也没有用于处理跨请求“状态”的内在机制。

我的假设是,您需要一台或多台服务器在具有 SSL 的 ELB 经典负载均衡器后面,并在 TCP 模式下运行,使用您站点域的子域,将浏览器连接到后端以实现持久连接.

即使这个答案有帮助,老实说,我不确定它是否足够有帮助......所以你可能希望推迟接受它,因为有人可能会出现并提供一个更深入研究的答案socket.io 的内部结构以及它将如何与 CloudFront 进行互操作(如果可以进行此类互操作)。

【讨论】:

  • 自从您回答后,有没有针对此问题提出的解决方案?
猜你喜欢
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2017-07-10
  • 2020-10-07
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
相关资源
最近更新 更多