首页 > 解决方案 > 使用 websocket 的 Web 应用程序“无法建立连接。接收端不存在。”

问题描述

Java 服务器、javascript 客户端、无特殊库、纯文本 HTTP/1.1 和 websocket 连接。使用 JDK 16 和 Tomcat 版本 10.0.2 中的 websocket jar 编写的服务器端(在 Eclipse 中)。(也尝试了其他 JDK 和 websocket jar 的许多排列。)
两个 Web 应用程序。PC 上的 Tomcat 10.0.2,服务器上的 10.0.7。这两个应用程序都在 Windows 10 上运行。部署到 Ubuntu 20.04 服务器。两个程序都显示初始 HTTP 数据。一个程序获得 websocket 连接并运行,另一个程序无法获得 websocket 连接。两者都使用相同的代码来计算 websocket 连接的目标 URL:

window.onload = function() {
    var target = "ws://" + location.host + "/[context]/[endpoint]";
    console.log("target: " + target);
    try {
        if ('WebSocket' in window) {
            socket = new WebSocket(target);
        } else if ('MozWebSocket' in window) {
            socket = new MozWebSocket(target);
        } else {
            alert('WebSocket is not supported by this browser.');
            return;
        }
    } catch (e) {
        console.log("websocket connection exception: " + e.description);
    }
... 

只有 [context] 和 [endpoint] 不同。回想一下,这些 URL 可以在 PC 上运行。我相信它们是“格式良好的”/有效的。

失败的网络应用程序的结果:

火狐:

未捕获的异常:无法建立连接。接收端不存在。
GET ws://35.xxx.xx.xx:8080/Memory/MemoryEndpoint[HTTP/1.1 404 70ms]
Firefox 无法在 ws://35.xxx.xx.xx:8080/ 处建立与服务器的连接内存/内存端点。

铬合金:

错误处理响应:TypeError: Cannot read property 'encrypt' of undefined
at Object.13 (chrome-extension://bkdgflcldnnnapblkhphbgpggdiikppg/public/js/content-scripts/autofill.js:1427:33)
。. .
game.js:31 WebSocket 连接到 'ws://xxx.xx.xx.xx:8080/Memory/MemoryEndpoint' 失败:

关于“加密”未定义问题,Chrome 继续写了很多行。我不知道那是什么,但它可能非常相关。上面的最后一行暗示下一行可能会给出失败的某些原因,但它是空的。

两个浏览器都不会记录以“websocket 连接异常:”开头的预期异常文本。

Tomcat 日志文件都是干净的,除了 localhost__access_log 中的一些奇怪的条目,例如: 209.90.225.218 - - [11/Jul/2021:00:43:33 +0000] "HEAD /robots.txt HTTP/1.0" 404 - 和其他提到/invoker/readonly, /login, /jenkins/login, /nifi/. 两个程序都从 Tomcat 服务器返回结果的事实告诉我,端口等权限就足够了。我还研究了 netstat 结果等,查看了防火墙设置,阅读了许多文章和寻求帮助。(可能无关紧要,因为 Tomcat 确实返回了预期的 HTTP/1.1 数据。)不走运。

我需要这个程序才能工作。我会在 2021 年 7 月 16 日之前为解决此问题支付现金奖励,但我不知道如何谨慎协商。:-(

标签: javascriptubuntutomcatwebsocketconnection

解决方案


问题解决了,虽然我不明白原因。回想一下:Web 应用程序在部署到 Tomcat 版本 10.0.2 的开发 PC 上运行良好,适用于各种 JDK、websocket 库(包括已安装在 VM 上的 Tomcat 10.0.7 中的一个)。该应用程序在 Ubuntu VM 上失败。有朋友在VM中安装了Tomcat 10.0.8。快!网络套接字工作。


推荐阅读