是否可以在AWS Lambda中使用Socket.io?
是否可以在AWS Lambda中构build一个创buildWebSocket并将数据发送到订阅应用程序的函数?
像这样的东西:
John在手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行一个Lambda函数,创build一个socket.io服务器并将更新推送给所有订户,他的手机已经打开了应用程序,所以应用程序自动更新与新的照片。
这可以通过推送通知或Amazon SNS来完成,但是如果我需要实时行为,例如需要更新angular色位置的在线游戏,该怎么办?
如果Lambda无法实现这一点,有没有解决scheme可以使用桌面浏览器更新我打开的应用程序?
亚马逊EC2是唯一的select? 我读过它有缩放问题,这就是为什么我在评论Lambda。
我不认为Lambda会为你描述的情况工作。 下面的AWS论坛的链接指出,Lambda函数最多只能运行5分钟,而且由于每100ms的函数运行时间收费,这可能是成本高昂的。 亚马逊有评论说,他们已经多次听到这个请求,所以有兴趣以某种方式允许这样做。
https://forums.aws.amazon.com/thread.jspa?threadID=205761
这里有一个人使用EC2和NodeJS取得了很大的成功,但是他不得不使用一个名为Websockets / ws的Socket.io。
http://www.jayway.com/2015/04/13/600k-concurrent-websocket-connections-on-aws-using-node-js/
如果您计划在负载平衡器后面运行服务器,则看起来您将有更多的麻烦:
最近AWS发布了支持WebSockets的物联网服务。 无服务器Web应用程序使用Pub / Sub消息系统非常容易。 您可以通过http post request
从AWS lambda function
发布新消息,并将其作为websocket消息在客户端上接收。
我编写了一个小的npm包,用于处理从前端应用程序到MQTT服务器的websocket连接。 看看aws-mqtt-client
没有! Lambda 不是为socket.iodevise的。 Lambda仅用于短时间处理。
如果你想提供便宜的通知,你可以尝试像PubNub或实时框架的外部服务。
如果你只想保持使用亚马逊服务,不要打扰尝试SNS,因为它不会服务于这个用例(没有浏览器端点)。
但是,您可以尝试AWS IoT 。 我知道这听起来很奇怪,但是由于它通过MQTT支持浏览器,所以它是一个便宜,快速和容易开发通知的好工具。 按照这个链接一个伟大的教程。 演示代码在这里可用。
我认为您可以将AWS Lambda与其他PUB / SUB服务(如PUBNUB https://www.pubnub.com/docs/pubnub-rest-api- documentation)结合使用。
- 前端/应用程序使用AWS Lambdadynamic创build和pipe理主题
- 前端/应用程序从AWS Lambda或DB获取主题信息
- 前端/应用程序join相应的主题,并直接发送消息给PUBNUB
如果您有实时情况需要执行计算或利用实时数据stream分析,则需要考虑将来自游戏的stream式事件(反映游戏状态变化)转换为devise的平台以实现快速,高可用性的事件stream,例如像AWS Kinesis这样的Kafka实现。 然后,您可以使用专为实时stream分析而devise的工具(如Apache Spark或Apache Storm)来使用事件stream。 (AWS已经实现了这两种技术。)
然后,您可以使用AWS Lambda(可以通过您的Kinesispipe道中发生的事件触发)来使用stream式分析(也可以select额外提供事件提供的数据),以将更新推送给所有订户。
这是针对您的问题的最佳实践“大数据”微服务方法的示例,与pipe理您自己的EC2实例并需要担心所有问题相比,它将更具弹性,成本效益,易于维护和可扩展的负载平衡和可用性和复制以及服务器状态和幂等和扩展以及资源浪费和部署pipe道和实例监控等等的额外麻烦。
就个人而言,我更喜欢这种方法,更便宜,更容易维护,performance更好,让我晚上睡觉,并允许我不受噩梦的不间断的睡眠。