javascript - Jetty Web 套接字超时

标签 javascript sockets websocket jetty

我正在尝试使用 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 应释放(或停止监听)端口并显示控制台日志。

请让我知道实现此目的的最简单方法。

最佳答案

从客户端,您正在连接到某个网络套接字。如果端口(在您的情况下为 9995)可用于连接,则意味着某些程序(在服务器模式下)正在监听并响应。并做一些事情 - 用一些数据回答。因此,如果该程序存在并应答,则您可以连接到该程序;如果没有端口 9995 的服务器监听器,则不能连接。当您说“端口被其他进程占用”时,意味着该进程存在并应答。这个过程将按照其设计目的做出响应。因此,从客户端来看,您所做的就是连接到现有的正在运行的进程,该进程在服务器模式下监听此端口。仅此而已。

但是,如果我们忽略您关于 OP 仅与客户端有关的评论,那么我的第一个建议是查看服务器配置并检查它是否处于多线程模式,并且可以一次回答和处理多个请求。您所描述的内容看起来像您有一个单线程进程,该进程仅处理一个请求,并且可以在当前完成时回答下一个请求。这听起来像是“进程被占用”。但由于评论坚称我们只讨论客户端,因此这种猜测是不必要的。

关于javascript - Jetty Web 套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829942/

相关文章:

javascript - amCharts:如何优雅地管理 dataLoader 中数据的缺乏

php - 在 Ajax 响应回调中获取 json

javascript - 使用 zoom.center 转换 d3v6 Observable 示例

python - 设置 IP header 的标志字段

Node.JS + socket.io + IIS = ECONNRESET

spring-boot - 如何使用 spring-messaging-5.1.* 连接 stomp+ssl broker?

amazon-web-services - WSS websocket 的 ELB 监听器配置

javascript - 褪色图像/流畅的网站使用

c - 已接受来自 00 :00:00:00:00:00; after connect 的连接

java - 没有 JEE/应用程序服务器的独立 WebSocket 服务器