声明:本文转自 DEV Community 网站,文章翻译由开发者社区提供;

点击下方链接,查看英文原文:

服务之间或人员之间的实时通信都很难实现。

好在,身处当今的云计算时代,我们可以通过多种选择来实现可靠的,基于 WebSocket 的通信。

本文将介绍亚马逊云科技环境中的 WebSocket。具体有哪些选择?各有什么利弊?分别要部署哪种架构?

一起看看吧。

Amazon API Gateway WebSocket

2018 年 12 月,亚马逊云科技发布了 Amazon API Gateway 的一个新功能:对 WebSocket 的支持。

我还记得当时自己对此感到很兴奋。由于我在学习一门新的编程语言时往往会选择开发一种聊天应用程序(因为我觉得待办事项清单那类应用程序有些无聊),因此我当时立即就开始阅读服务文档开始了解这项功能了。

阅读文档后,我的热情很快消退。

  • 对广播行为的支持很不理想。据我所知,无法通过单一 API 调用以原生方式将消息发送给多个连接。需要广播功能的情况下,缺乏对Topic或Room的原生支持使 Amazon API Gateway WebSocket 成为不太适合的选择。

  • 需要以某种方式跟踪每个连接的状态。在我看来,通常开发者会倾向于使用 Amazon DynamoDB 实现这一点。如果你需要的是一种完全托管的解决方案,那么肯定会对该功能感到失望。

不过该功能也并非没什么好处。

  • 由于你可能已经在使用 Amazon API Gateway,将 WebSocket 加入你的架构,整个过程的复杂性可大幅降低。

  • 借助 Amazon API Gateway 的直接集成功能,我们可以创建精细有弹性的 WebSocket 后端,完全无需使用 Lambda 函数。

我自己就接受了这样的挑战。结果可以看这里

  • 该功能的活动部件数量相对较少,在我看来,非常易于上手并且学习过程很简单。

架构

我认为 Amazon API Gateway WebSocket 是池化的绝佳替代品。取决于服务的流量大小,维护 WebSocket 连接可能比定期向 API 发出请求更便宜。这里有一个关于该话题的精彩资源

Amazon AppSync GraphQL 订阅

Amazon AppSync是一种用于创建托管 GraphQL API 的服务。随着 GraphQL 逐渐进入主流,该服务开始快速普及。

实时功能可通过 GraphQL 订阅提供。解释 GraphQL 订阅到底是什么,这已经超出了本文的范围,如果你对该技术还不太熟悉,建议自己做做功课。

  • 依本人拙见,你在实施过程中可能会遇到很多问题这里有一篇关于该话题的精彩文章

  • 前端方面,你可能在将 Amazon AppSync JavaScript 客户端与自己的某个 GraphQL 客户端库进行集成时遇到问题。截止撰写本文时,GitHub 上已经出现大量相关问题,这些问题都与我最喜欢的 GraphQL 客户端:apollo-client进行的集成有关。

  • 这一点可能比较明显,但我依然有必要提出。据我所知,该功能仅在 GraphQL 上下文中可用。如果能有非 GraphQL 版本的 Amazon AppSync 订阅那就太好了。但也许这样的服务已经存在?继续读下去吧!

  • 天呐!我们可以用 Amazon AppSync 完成很多工作。如果一切正常,该服务可以为你节约大量时间。依本人拙见,所需的基础知识都很容易掌握,如果你已经熟悉 GraphQL,那么很容易就能掌握 AppSync 订阅的运作。

  • Amazon AppSync 订阅扩展性很好根据亚马逊云科技的介绍扩展至数百万个连接通常都应该不会有问题。从个人经验来说,我能够毫无问题地将服务推送给大约 50 万个连接。

架构

Amazon AppSync 提供了丰富的选择。该服务非常适合绝大部分(甚至全部)需要 GraphQL 订阅的场景。我建议你能熟悉服务页面上列出的各种 Amazon AppSync 用例

Amazon IoT Core MQTT

当我第一次听说 Amazon IoT 服务套件时,最后我想到的是能为 WebSocket 提供丰富且可扩展的支持。进一步了解后,我惊喜地发现该服务甚至提供了完全托管的 MQTT 主题。

  • 为了全面理解 WebSocket 功能,首先需要熟悉很多服务中的移动部件。设备影子是什么?是否需要某种类型的证书来进行身份验证?数据端点是什么?我在试图搞清该服务的运作前就问过自己这些问题。

  • 也许因为我生活在自己的“社区泡泡”里吧,但我几乎没看到多少有关使用 Amazon IoT Core 中 WebSocket 功能的教程。你也许会发现自己遇到的问题很难找到答案。这是我在学习该服务时参考的博客文章

  • 通过 Amazon IoT Core MQTT 实现的 WebSocket 是独立于 API 架构的。你是否使用了自己的 GraphQL 服务器?或者更愿意使用 REST API?无论怎样都可以与 IoT Core MQTT 集成。记得我曾在上文中提过想要用非 GraphQL 版本的服务来处理 WebSocket 吗,我所指的就是这个服务。

架构

与物联网相关的所有事情都不是我的专业领域。不过这并没有阻止我探索的脚步。

我相信 Amazon IoT Core MQTT 可以用于实时的前端功能切换。在 Amazon Amplify 插件的帮助下,将前端与服务相集成的过程应该很简单。这里介绍了我使用 Amazon IoT Core 构建实时前端功能切换的过程

总结

在亚马逊云科技平台上无服务器的WebSocket方面,开发者有很多选择:从GraphQL相关的服务到Amazon IoT Core MQTT主题令人眼前一亮的用法,非常丰富。

希望本文可以让你有所收获。我计划进一步介绍每项服务的基本信息,同时也鼓励大家自行探索。

如果你有任何问题,欢迎通过Twitter给我发私信:@wm_matuszewski

感谢你的阅读。

文章作者:Wojciech Matuszewski

Wojciech Matuszewski for AWS Community Builders

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐