使用 websocket 的 Web 应用程序“无法建立连接。接收端不存在。”

Posted

技术标签:

【中文标题】使用 websocket 的 Web 应用程序“无法建立连接。接收端不存在。”【英文标题】:Web application using websockets “Could not establish connection. Receiving end does not exist." 【发布时间】:2021-07-11 04:25:55 【问题描述】:

Java 服务器、javascript 客户端、无特殊库、纯文本 HTTP/1.1 和 websocket 连接。 使用 JDK 16 和 Tomcat 版本 10.0.2 中的 websocket jar 编写的服务器端(在 Eclipse 中)。 (也尝试了其他 JDK 和 websocket jar 的许多排列。) 两个网络应用程序。 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/Memory/MemoryEndpoint 的服务器建立连接。

铬:

错误处理响应:TypeError: Cannot read property 'encrypt' of undefined 在 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 日之前为解决此问题支付现金奖励,尽管我不知道如何谨慎地协商。 :-(

【问题讨论】:

我遇到了相同的 chrome 消息(但没有任何套接字连接错误),这是由 chrome 扩展引起的。就我而言,它是“鸭鸭去”,但任何扩展都可能导致您出现问题。尝试禁用所有扩展程序,看看是否有帮助? 非常感谢您的建议。我尝试过这个。结果如您所料:神秘的 Chrome“加密”错误消息消失了;但是,唉,正如你所暗示的,它并没有影响 websocket 错误。 【参考方案1】:

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

【讨论】:

以上是关于使用 websocket 的 Web 应用程序“无法建立连接。接收端不存在。”的主要内容,如果未能解决你的问题,请参考以下文章

servlet WebSocket(无注释)

是否可以使用 AWS 以无服务器方式订阅 WebSocket?

webSocket

基于go-gin框架的web服务框架之websocket(二)

WebSocket

[Go] Golang练习项目-web客服系统即时通讯websocket项目go-fly