【问题标题】:AWS API Gateway integration with Socket.ioAWS API Gateway 与 Socket.io 的集成
【发布时间】:2019-06-22 23:04:59
【问题描述】:

我想将 API Gateway 端点与 Socket.io 服务器端点映射,以便通过 Cognito 对用户进行身份验证,如果成功,则重定向到 Socket.io 服务器并建立一个带有可选命名空间和房间的套接字。

这有意义吗?我没有找到任何示例,API Gateway 最近才启用了 WebSocket API,但不支持 Socket.io

【问题讨论】:

  • 你成功连接socket.io和WebSocket API网关了吗?我一直有很多问题。使用本机 JS WebSocket 实现工作正常,但不是 Socket.IO。
  • 您是否设法将 socket.io 与 API Gateway 集成?@HansAraya

标签: amazon-web-services socket.io aws-api-gateway amazon-cognito


【解决方案1】:

您的问题分为两部分:

首先,API 网关使用 Cognito 对您的客户端进行身份验证;

其次,假设您使用的是运行带有 Socket.IO 的 Node.JS 的 EC2,并使用 API 网关作为客户端的端点。

对于第一部分,您可以使用以下reference from AWS documentation。 当您谈论 AWS Cognito 时,有几个子部分,例如包括 AIM 权限 Method Execution 以启用 API 资源端点 HTTP 方法。

对于第二点,enable API Gateway 与运行 Socket.io 的 EC2 端口建立同步连接,您可以阅读一些参考资料,例如 this one。 您应该配置您的 API 网关:

  1. 协议WebSocket连接
  2. 选择您的Route Selection expression,例如\$default
  3. 为每个$connect$disconnect$default映射目标后端
    1. 使用集成类型 AWS 服务
    2. 选择 EC2 并填写其余配置。

【讨论】:

  • aws api socket gateway如何与客户端socket.io集成?
  • 有人成功通过api网关连接socket.io服务器吗?
【解决方案2】:

Rafael 的回答更侧重于使用 Websocket API 网关,在我看来这仍然是相对较新的,还有一些改进的空间。另外,我不喜欢将 lambda 与数据库访问集成,因为没有 RDS 代理,它们会非常快地超过 db 连接,而且我认为 HTTP 集成不会为整个事情增加任何东西,因为你最终会执行 HTTP 请求,但它是通过 Websocket API 调用。

我同意 Rafael 的一件事是,您需要有一个运行 socket.io 的 EC2 实例,无论它是在 Node.js 还是 python 中(在我的例子中,我使用 python 和 Flask)。

我设法通过使用 HTTP API 网关并设置 allow_upgrades=False 连接到我的 socket.io,因此 http 协议不会升级到 ws 协议,因为 HTTP API 网关不支持 ws。我的 HTTP API 网关只是将 socket.io 请求转发到负载均衡器,这样做的好处是您可以在 HTTP API 网关中定义的每个路由上定义access control

我的 EC2 实例上的 socket.io 是这样定义的:

socketio = SocketIO(async_handlers=True, allow_upgrades=False, cors_allowed_origins='*')

我的客户端只需调用启用了代理集成的 HTTP API 网关中定义的路由即可连接到它。

https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/socket.io/{proxy}

最终结果 - 客户端连接到套接字

【讨论】:

  • 请用您的示例解释它是如何实现的。我尝试了几种方法。在 ECS Farget 中运行的服务器中,socket.io 连接始终显示 404。通过 ALB 连接的 Http API 网关。
  • 最终做了类似的事情,尽管可能有人认为通过明确不升级/切换 porotocols,你让 socket.io 执行 http 长轮询,与使用真正的 websockets 相比有缺点.
猜你喜欢
  • 2020-11-20
  • 2022-08-22
  • 1970-01-01
  • 2021-06-10
  • 2018-12-25
  • 2018-06-09
  • 2021-06-08
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多