当前位置: 首页 > 知识库问答 >
问题:

是否可以将Socket.io与AWS Lambda一起使用?

申屠恺
2023-03-14

是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序?

类似这样:

John在他的手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行创建套接字的Lambda函数。io服务器并将更新推送到所有订户,他的手机打开了应用程序,因此应用程序会自动更新新照片。

这可以通过推送通知或亚马逊SNS来实现,但如果我需要实时行为,比如一个在线游戏,我需要更新角色的位置,该怎么办。

如果Lambda无法实现这一点,是否有任何解决方案可以使用桌面浏览器更新我打开的应用程序?

亚马逊EC2是唯一的选择?我已经读到它在缩放方面有问题,这就是为什么我要评论Lambda。

共有3个答案

潘刚洁
2023-03-14

更新(自AWS re:invent 2018起):API网关现在支持WebSocket!请参阅此处使用API网关websockets和Lambda的示例:

  • https://serverless.com/blog/api-gateway-websockets-support/
  • https://aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/

以及API网关此功能的文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html

还有一个有趣的节点示例。使用套接字的js框架。io与API网关,但我还没有调查它是否特别适用于您的用例:https://github.com/tiaod/moleculer-io

你应该考虑使用亚马逊物联网核心。我会解释的。

如果您遇到需要在实时流上执行计算或利用分析的实时情况,则需要考虑将事件(反映实时状态变化)传输到设计用于快速、高可用性事件流的平台,例如像AWS Kinesis这样的Kafka实现。然后,您可以使用为实时流分析设计的工具中的事件流,例如Kinesis analytics或Apache Spark或Apache Storm。

然后,您可以使用AWS Lambda(可以由通过您的Kinesis管道的事件触发)使用流媒体分析(以及可选的其他事件提供的数据)向所有订阅者推送更新。如果通过Amazon IoT Core服务连接,您可以向这些订阅者实时推送更新,特别是如果您为每个用户创建一个“主题”。该服务的设计使您对可以拥有的主题数量没有上限,因此它应该弹性扩展。

这是解决问题的最佳实践“大数据”无服务器(只要您避免维护虚拟机,只使用无服务器/托管服务)方法的一个示例,它将更具弹性、更具成本效益、更易于维护,与管理自己的EC2实例相比,它更具可扩展性,并且需要担心负载平衡、可用性、复制、服务器状态和幂等性、可扩展性、浪费的资源以及部署管道和实例监视等所有其他问题。。

如果您使用Amazon IoT核心服务,甚至可以使用MQTT上的web套接字将事件直接推送到客户端浏览器(这是非常快速和轻量级的),并且可以将其直接与AWS Lambda集成。这里有一个使用物联网核心的优秀演示应用程序:https://github.com/aws-samples/aws-iot-chat-example

就我个人而言,我更喜欢成本更低、更容易维护、性能更好、允许我在晚上睡觉,并且允许我不受噩梦干扰地睡觉的方法。

苏宏逸
2023-03-14

我认为Lambda不会适用于你在这里描述的案例。下面AWS论坛的链接指出,Lambda函数最多只能运行15分钟,而且由于您每100毫秒的函数运行时间收费,这可能成本过高。亚马逊发表评论称,他们已经多次听到这一请求,因此有兴趣以某种方式允许这一请求。

https://forums.aws.amazon.com/thread.jspa?threadID=205761

这是一个人的帖子,他似乎在使用EC2和NodeJS方面取得了很大的成功,但他不得不使用一个名为Webockets/ws的Socket.io替代品。

http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/

如果您计划在负载均衡器后面运行您的服务器,那么看起来您将有更多的障碍要跨越:

https://web.archive.org/web/20160118124227/http://coding-ceo.ghost.io/how-to-run-socket-io-behind-elb-on-aws

唐永春
2023-03-14

最近,AWS发布了对物联网服务WebSocket的支持。它很容易用作无服务器web应用程序的发布/订阅消息系统。您可以通过http post请求从AWS lambda函数发布新消息,并在客户端上作为websocket消息接收。

我编写了一个小的npm包,用于处理从前端应用程序到MQTT服务器的websocket连接。查看aws mqtt客户端

 类似资料:
  • 我想让flume代理位于hadoop集群之外,并想知道是否有可能使用flume通过WebHDFS向hadoop集群发送消息。 如果没有,是否有使用WebHDFS的替代方案?使用多层水槽层仍然需要我在hadoop集群中运行水槽代理。

  • 问题内容: 我正在使用Phonegap + React.js和Socket.io开发一个应用程序。但是,随后React-Native发行了,其原生感觉很棒。 我试图让socket.io-client与React Native一起工作,但是不幸的是没有成功。我做了一些研究,发现与此问题中描述的错误完全相同:https : //github.com/facebook/react- native/iss

  • 问题内容: 我对正则表达式很糟糕,但是我想知道是否可以将ng-pattern与变量一起使用 例如, 其中validationCode是控制器中附加到$ scope的变量 如果 则ng-pattern将是 但这不起作用,似乎我需要创建一个我真的不想要的自定义指令 问题答案: 需要一个正则表达式。 从Angular的文档中有关: 如果该值与模式表达式不匹配,则设置模式验证错误键。期望值用于内联模式或定

  • 我对Spring webflux和protobuf都是新手。我一直在读一些东西,我发现它们之间有一些相似之处。喜欢 Spring webflow可以部署在netty上,gRPC也是如此。 两者都适用于流数据。 这两个框架都在某种程度上基于观察者设计模式,支持基于均匀的数据处理方法。 然而,我仍然找不到任何结合webflux(反应式编程)、gRPC(更快的数据编码和解码)和Spring(依赖注入)功

  • 我一直使用ElasticsearchIntegrationTest在没有elasticsearch服务器的情况下测试我的代码。我的类中的私有成员很少,所以考虑使用Powermock访问私有成员。在运行测试时,我得到异常。 Powermock是否可以与ElasticSearchintegrationTest一起使用?? 代码: 例外情况: 原因:javassist.CanNotCompileExce

  • 问题内容: Facelets依赖XML名称空间来与XHTML一起使用。HTML 4怎么样,据我所知,HTML 5不支持名称空间。HTML 5还具有XHTML中不可用的一些新元素。甚至HTML 4和XHTML在它们支持的元素和属性上也有一些差异。 问题是:是否可以使用Facelets呈现HTML 4/5文档?如果是这样,怎么办? 问题答案: 由于Facelets是一种基于XML的视图技术,本质上可以