我的应用程序由两部分组成:WebSocket服务器 - 托管在OpenShift DIY盒式磁带上; WebSocket客户端 - 从家用PC连接到我的服务器。 WebSocket服务器是使用嵌入式Jetty及其WebSockets库编写的。客户端使用JAVA和Tyrus库编写。除了一个我无法解释的故障外,它的效果非常好。
在OpenShift DIY盒式磁带上运行WebSocket服务器时,WebSocket连接每2分钟就会丢失一次。连接丢失非常精确地发生,因此很明显它与潜在的网络中断无关。此外,我已经在Heroku上测试了完全相同的应用程序,并且没有连接丢弃。而且onClose(...)方法接收NORMAL_CLOSURE关闭代码。
我几乎可以肯定OpenShift Apache层每2分钟关闭一次空闲的WebSocket连接。即使WebSocket客户端发送Ping消息并从服务器接收Pong消息。有没有人经历过这种类型的WebSocket连接掉线?是否有可用于防止连接丢失的参数?
提前谢谢。
更新:我在服务器端添加了一个专用线程来向客户端发送Pong消息(Jetty不支持Pong处理程序,所以我不能使用Ping消息)并且丢弃消失了。看起来OpenShift Apache层开始将连接视为“活着”并且不关闭它。然后我注意到一个更奇怪的行为:有人每小时通过HTTPS ping我的服务器端应用程序。 HTTP标头如下所示:
HTTP / 1.1 HEAD /
接受: /
用户代理: Ruby
X-Forwarded-Proto: https
X-Forwarded-Host:.... rhcloud.com
连接:保持活力
X-Request-Start:t = 1409771442217677
X-Forwarded-For: 10.158.21.225
主持人:wsproxy-gimes4dieni.rhcloud.com
X-Forwarded-Port:443
X-Client-IP:10.158.21.225
X-Forwarded-SSL-Client-Cert :( null)
X-Forwarded-Server:localhost
我不使用Ruby,我只使用HTTP和IP地址不同于我的常规请求。有没有人知道这是否是某种OpenShift“服务”来自互联网?
答案 0 :(得分:0)
通过SSH进入您的项目,使用~/haproxy/conf/haproxy.cfg
等文本编辑器打开vi
,然后根据需要修改timeout queue
,timeout client
和timeout server
。我将我设置为5m
,这是5分钟。完成更改后,退出并运行
~/haproxy/bin/control restart
现在应该设置你的websocket超时。