2015-06-14 92 views
2

我正在尝试使用Jetty 9.3.0 RC建立Web Socket连接。Jetty Web Socket超时

function checkDetails(port) { 

    var ws = new WebSocket("ws://localhost:9995/application"); 

    ws.onopen = function(event) { 
     console.log("onopen called..."); 
    } 
    ws.onerror = function(event){ 
     console.log('onerror called...'); 
    } 

    ws.onmessage = function(event) { 
     console.log("onmessage called..." + event.data); 
    } 

    ws.onclose = function(event) { 
     console.log("onclose called..." + port); 
     console.log(event); 
     ws.close(); 
    } 
    } 

的代码工作正常,如果用于创建Web Socket连接的端口是没有被其他进程占用

var ws = new WebSocket("ws://localhost:9995/application"); 

但在情况下,如果端口是由一些其它进程占用,然后不断尝试,直到端口被释放与该端口进行连接。

我需要提供一个超时,以便如果端口在3分钟内没有响应,那么Web Socket应该释放(或停止监听)端口并显示控制台日志。

请让我知道最简单的方法来实现这一点。

+0

你能澄清你的问题的哪些部分涉及到客户端,以及服务器的哪些部分? –

+0

这篇文章中提到的一切都是指客户...... – user182944

回答

2

从客户端连接到某个Web套接字。如果端口(您的情况为9995)可用于连接,则意味着某些程序(在服务器模式下)正在侦听和响应。做一些事情 - 用一些数据来回答。因此,如果存在并且答案的话可以连接到这样的程序,或者如果没有端口9995的服务器侦听器,则可以连接到此程序。当您通过某个其他进程说“端口已被占用”时,表示此进程存在并且应答。而且这个过程会随着它的设计而作出回应。所以,从客户端来说,你所做的一切都是连接到现有的正在运行的进程,它在服务器模式下监听这个端口。就是这样,就是这样。但是,如果我们忽略你的意见,即OP只是关于客户端,那么我的第一个建议是查看服务器配置并检查它是否处于多线程模式,并且可以一次回复并处理多个请求。你所描述的看起来像你有单线程的进程,它只处理一个请求,并且在当前完成时可以回答下一个请求。这听起来像“过程占用”。但由于评论坚持认为我们只是在谈论客户端,那么这种猜测就没有必要了。