javascript - 使用 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 日之前为解决此问题支付现金奖励,但我不知道如何谨慎协商。:-(
解决方案
问题解决了,虽然我不明白原因。回想一下:Web 应用程序在部署到 Tomcat 版本 10.0.2 的开发 PC 上运行良好,适用于各种 JDK、websocket 库(包括已安装在 VM 上的 Tomcat 10.0.7 中的一个)。该应用程序在 Ubuntu VM 上失败。有朋友在VM中安装了Tomcat 10.0.8。快!网络套接字工作。
推荐阅读
- sql - 条件聚合查询没有给出正确的输出
- c# - 从模型类继承视图模型是好还是坏?
- latex - Latex 使用未安装的字体
- javascript - 对从子组件更改父组件状态而不重新渲染所有子组件的最佳实践做出反应?
- c++ - 如果结果为假,C++ 循环返回开始
- go - Gorilla/mux SPA 无法正确提供静态目录
- ios - react-native 在 iOS 上查找当前的 AVPlayer 和 UIView 实例
- arrays - 类型没有成员“下标”
- javascript - 如果存在某些角色,如何从用户中减去不同的金额 Discord.JS
- javascript - 将 PHP 回显变量分配给 document.getElementById 时遇到问题