Playframework 服务器上的WebSocket连接状态

Playframework 服务器上的WebSocket连接状态,playframework,websocket,playframework-2.2,java-websocket,Playframework,Websocket,Playframework 2.2,Java Websocket,我在上使用Play Framework 2.2.1来处理WebSocket连接 通常,当连接被客户机故意关闭(通过调用close函数)或被不需要的事件(如客户机崩溃)关闭时,将调用以下onClose函数 socketIn.onClose(new F.Callback0() { public void invoke() { // Send a Quit message

我在上使用Play Framework 2.2.1来处理WebSocket连接

通常,当连接被客户机故意关闭(通过调用close函数)或被不需要的事件(如客户机崩溃)关闭时,将调用以下onClose函数

socketIn.onClose(new F.Callback0() {
                    public void invoke() {
                             // Send a Quit message
                        }
                       });

这里的问题是,有时,在发生不需要的事件时,不会调用onClose回调。从服务器的角度来看,客户机看起来仍然处于连接状态。处理这个问题的最佳方法是什么?我应该像每秒钟一样ping客户机以查看他是否在线,还是从客户机ping到服务器?

不幸的是,没有简单的解决方案。具体地说,Play不可能推断连接本身已丢失

在Play支持读取/空闲超时之前,您可以自己实现它们。我们的浏览器扩展保持一个持久的websocket连接,并且每x秒运行一次应用程序级ping。如果线路静得太久,客户端和服务器都可以启动断开连接


我对JavaWebSocket API不太熟悉,但抽象地说,您只想记录服务器上最后一次通信的时间,并让线程/参与者/计划任务清理旧连接。然后,为了使连接保持活动状态,请在套接字上运行ping。我们在客户机上启动ping(但在服务器上也可以),如果服务器在2秒钟内没有发出pong,客户机将断开连接并重新连接。

在您的应用程序中,您的websocket连接是否会长时间处于空闲状态,这意味着两个方向的流量都不会长时间存在?