我正在尝试使用Jetty 9.3.0 RC建立Web套接字连接。
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连接的端口9995 被其他进程未占用,则代码可以正常工作。
var ws = new WebSocket("ws://localhost:9995/application");
但是如果某个其他进程的端口被占用,那么它会继续尝试连接该端口,直到该端口被释放。
我需要提供超时,以便如果端口在3分钟内没有响应,则Web Socket应释放(或停止侦听)端口并显示控制台日志。
请让我知道实现这一目标的最简单方法。
答案 0 :(得分:2)
从客户端,您将连接到某个Web套接字。如果端口(在您的情况下为9995)可用于连接,那么这意味着某些程序(在服务器模式下)正在侦听和响应。做一些事 - 用一些数据回答。所以,你可以连接到这样的程序,如果它存在和答案,或者你不能,如果没有端口9995的服务器监听器。当你说“端口被占用”时,某个其他进程意味着这个进程存在并回答。此过程将以其设计的任何方式作出响应。因此,从客户端来看,您所做的就是连接到在服务器模式下侦听此端口的现有和正在运行的进程。就是这样,就是这样。
但是,如果我们忽略您的评论,OP只是关于客户端,那么我的第一个建议是查看服务器配置并检查它是否处于多线程模式,并且可以立即应答并继续多个请求。您所描述的内容看起来像是单线程序,它只能处理一个请求,并且可以在当前完成后回答下一个请求。这听起来像“过程占用”。但由于评论坚持我们只谈论客户方,因此这种推测是不必要的。