如果我在AWS S3上有一个静态站点(并且可能使用CloudFront)非常酷,因为它可以轻松扩展,并且具有零停机时间部署,因为您只是更新静态资产并分配到边缘位置,哇噢!
但是,如果我想在联系页面上使用Socket.io获得一些实时聊天支持功能,我该如何告诉亚马逊处理Websockets?我可以使用Route53对特定域的Websocket请求做一些不同的操作,比如将它们重定向到Lambda吗? (Lambda无法运行socket.io可以吗?)
答案 0 :(得分:2)
与您的other question类似,这里的答案涉及DNS不涉及路径解析的事实,因此Route 53不是此问题的一个因素。
Socket.io几乎肯定需要一台服务器,并且通过CloudFront连接似乎不太可能。
虽然我不熟悉socket.io的底层传输协议(s?),但我没有看到解决方法。 CloudFront是一个反向代理,仅支持正确的标准HTTP请求/响应行为,这种行为不适合实时的面向事件的操作。 CloudFront不支持websockets,虽然Socket.io可能不需要它们,并且可能具有回退到兼容行为的灵活性,但它最多 - 如果可能的话,它将至少是次优的,因为即使使用长轮询(低效) ),单个响应的时间限制在30秒以内,因为CloudFront的固定超时计时器为30秒,无法修改。
类似地,通过API网关访问的Lambda函数仅适用于处理单个HTTP请求/响应周期,而不是任何持久性的,并且没有用于跨请求处理“状态”的内在机制。
我的假设是你需要一个或多个服务器支持ELB经典负载均衡器,使用SSL并在TCP模式下运行,使用站点域的子域,将浏览器连接到后端以进行持久连接
即使这个答案是有帮助的,我老实说也不确定它是否足够有用......所以你可能希望推迟接受它,因为有人可能会出现并提供更深入研究的答案。如果可以进行这种互操作,socket.io的内部以及如何与CloudFront进行互操作。