Java服务器、javascript客户端、没有特殊库、纯文本HTTP/1.1和websocket连接。使用JDK 16编写的服务器端(在Eclipse中)和Tomcat版本10.0.2中的websocket。(其他JDK和websocket的许多排列也被尝试过。)
两个网络应用程序。Tomcat 10.0.2在PC上,10.0.7在服务器上。这两个应用程序都运行在Windows 10上,部署到Ubuntu20.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);
}
...
只有上下文和端点不同的地方。回想一下,这些URL在PC上工作。我相信他们是“结构良好”的/valid。
失败的web应用程序的结果:
火狐:
未明确的例外:无法建立连接。接收端不存在。
获取ws://35.xxx.xx.xx:8080/Memory/MemoryEndpointHTTP/1.1 40470ms
Firefox无法在ws://35.xx.xx.xx:8080/Memory/MemoryEndpoint上建立到服务器的连接。铬:
错误处理响应: TypeError:无法读取未定义的属性“加密”
在Object.13 (chrome-extension://bkdgflcldnnnapblkhphbgpggdiikppg/public/js/content-scripts/autofill.js:1427:33)
。。。
到'ws://xxx.xx.xx.xx:8080/Memory/MemoryEndpoint‘的game.js:31 WebSocket连接失败:
Chrome继续使用许多关于“加密”未定义问题的行。我不知道这是关于什么,但这可能是非常相关的。上面的最后一行意味着在下一行中可能会给出失败的原因,但它是空的。
两个浏览器都不记录以"websocket连接异常:“开头的预期异常文本。
除了localhost__access_log中的一些奇怪条目之外,Tomcat日志文件都是干净的,例如: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数据。)不走运。
我需要这个程序起作用。在07-16-2021年之前,我会为解决这个问题支付现金奖励,尽管我不知道如何谨慎协商。:-(
发布于 2021-08-06 09:55:05
问题解决了,虽然我不明白原因。回想一下: web应用程序在部署到Tomcat版本10.0.2的开发PC上运行良好,用于各种JDK、websocket库(包括在VM上安装的Tomcat 10.0.7中的一个库)。这个应用程序在Ubuntu上失败了。一个朋友在VM中安装了Tomcat 10.0.8。普雷斯托!websockets工作。
https://stackoverflow.com/questions/68333210
复制相似问题