Scala中Websocket连接的超时

Posted

技术标签:

【中文标题】Scala中Websocket连接的超时【英文标题】:TimeOut for Websocket Connection In Scala 【发布时间】:2017-06-27 16:31:17 【问题描述】:

我有一个从客户端到 api 服务的 websocket 连接,然后从 API 服务到其他服务。 现在默认情况下连接超时(即当 web socket 连接上没有消息/通信时)是 1 分钟,我找到了增加它的设置,即使用 akka.http.client.idle-timeout = 300s 和 akka.http.server.idle-timeout = 300s .

但在我的情况下,这些设置适用于本地,超时增加(即在我的电脑上本地运行服务时),但当我在 EC2 上部署服务制作 docker 映像时却不行。

那么请谁能告诉我为什么它会这样?

【问题讨论】:

我不认为您在 EC2 上的服务直接暴露给客户,它可能通过负载均衡器/ngnix/或任何其他路由器进行路由......这些中间路由器可能正在关闭连接.你检查过吗? 嗨 Chenna Reddy,是的,我们使用的负载均衡器是 consul,并且从中重定向服务。所以我想我需要检查领事的设置。关于它的任何想法。 你可能想试试akka.http.server.request-timeout from doc.akka.io/docs/akka/2.4.9-RC1/scala/http/common/… 我已经试过了,它在本地工作正常。但在 ec2 上托管时却不行 @Piyush_Rana 也许你错过了某种保活?这对github.com/akka/akka/issues/19945 有帮助吗? 【参考方案1】:

这看起来更像是 Docker 配置问题,而不是 akka 问题。您应该通过两种方式调试容器的配置:

    登录 EC2 实例并使用docker inspect <containerid> 检查环境参数 强制 Akka 打印出配置

您可以在 application.conf 中设置以下参数

   akka 
      log-config-on-start = "on"
    

或者通过代码显式调用

myConfig.root().render() 

【讨论】:

以上是关于Scala中Websocket连接的超时的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket简介

websocket._exceptions.WebSocketProxyException:通过代理连接失败状态:503

浅谈WebsocketAjax轮询和长连接(long pull)

使用 stunnel 和 Ratchet 保护 websocket。连接已关闭

在 WebSocket 控制器中获取登录用户的 Principal

tomcat 7.0支持的最大活动websocket连接数是多少