是否有任何无服务器技术允许构建无服务器websocket服务器?
我知道长时间运行的连接的本质是它们是有状态的,但是如果唯一的状态是传输层的连接本身,那么似乎有一个无服务器的产品可以抽象出这一点,所以你只需要处理应用层。是否有云提供商(AWS、Azure等)允许这样做?我看不到AWS Lambda或Azure函数实现这一点的方法。
有人有什么想法吗?只是确认一下。
谢谢
发布于 2019-01-23 20:45:41
随着对AWS API Gateway的WebSocket支持的发布,您可以创建无服务器的WebSocket应用编程接口。
WebSocket接口由一条或多条路由组成。要确定特定入站请求应该使用哪条路由,您需要提供一个路由选择表达式。根据入站请求对该表达式进行求值,以生成与路由的某个routeKey值相对应的值。API网关将请求路由到对应的lambda函数。
来自亚马逊网络服务博客example,

该应用程序由application中的API组成,用于处理客户端和服务器之间的连接(1)。当客户端从API连接(2)或断开(5)时,两个AWS Lambda函数会做出反应。当客户端向服务器发送消息时,将调用sendMessage函数(3)。服务器使用新的API网关管理API将消息发送到所有连接的客户端(4)。要跟踪每个连接的客户端,请使用DynamoDB表来持久化连接标识符(您还可以使用它来存储有关连接的其他状态信息)。
您可以将其扩展为使用DynamoDB Streams向客户端发送有关数据任何更改的消息
发布于 2017-03-15 17:42:27
目前,AWS Lambda和Azure函数不支持此功能。如果您计划使用Websocket在亚马逊网络服务中设置可伸缩环境,您可以在ECS集群或具有Websocket支持的服务器(如NodeJS )的EC2实例前使用Application Load Balancer。
另一种解决方案是在您的体系结构中使用完全托管的服务,如Google Firebase Service或Pubnub来处理实时部分。
发布于 2017-03-15 19:37:39
如果唯一的状态是传输层的连接本身
事实并非如此。Web套接字连接exchange keep-alives作为第7层有效负载。其他人可能会争辩说,它更准确地描述为第6层和第7层之间的某个子层……但在任何情况下,它都远远高于传输层。
而且许多应用程序以其他方式使用web套接字,这些方式也不是无状态的。一旦连接,然后进行身份验证,就不需要不断地重新进行身份验证,因为套接字上的客户端在15分钟后将是同一个客户端,而这是在无服务器环境中不可避免的开销-- websocket上的每个操作都需要重新进行身份验证。再例如,对于恒定的数据流,服务器可能会跟踪已发送的内容或客户端感兴趣的流的特定子集。
如果您没有维护(或不需要)到服务器的持久连接,那么可以问这个问题:“为什么要使用web套接字?”
也许还相关: HAProxy是一个常用的负载均衡器,支持web套接字,它为每个当前的web套接字连接维护一个到单个后端服务器的持久连接。如果后端服务器脱机,则平衡器中没有提供为现有连接选择另一个后端。客户端将需要重新连接。
https://stackoverflow.com/questions/42802891
复制相似问题