【发布时间】:2017-09-20 01:15:52
【问题描述】:
我正在尝试运行我的第一个 websocket 应用程序并引用 this link to get some sample code 。我只是创建了 CustomEndPoint , WSClient class , html 文件,然后在 netbeans IDE 上运行它,它就像一个魅力。
我尝试将它部署在 Tomcat 服务器上,其 url 可以使用 https 访问,方法是将 ws:// 更改为 wss://,它在我的开发环境中工作,但是当我在生产环境中部署相同的代码时,它会抛出以下错误控制台:
与“wss://xxxxxx-xxx.xxxx.com/websoc/ratesrv”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:404
对于开发环境,我在 WS 调用下工作:
wsocket = new WebSocket("wss://dev_ip:8443/websoc/ratesrv");
对于我正在使用的 Prod(注意 url 中的 .com):
wss://xxxxx-xxxxx.xx.com/websoc/ratesrv
我是否还需要在 PROD 中明确提供端口号?
【问题讨论】:
-
视情况而定。 PROD 中的常见情况是您有一个 Web 层(apache 或任何其他充当反向代理的 Web 服务器)。该层定义了重定向规则,例如,对 xxxxxx-xxx.xxxx.com/websoc 的请求将被重定向到 prod_ip:8443/websoc。在这种情况下,您不需要指定端口。我的建议是用你的 webapp 部署一个简单的文件 (index.html) 并尝试访问 xxxxxx-xxx.xxxx.com/websoc/index.html。如果你得到一个 404,那么问题不在于 websocket,而在于 web 层重定向。
-
@MarcoA.Hernandez:当我部署战争文件时,我可以访问 xxxxxx-xxx.xxxx.com/websoc/index.html
-
你所有的调用(到 index.html 和 websocket)都是 https 吗?你可以试试http调用吗?如果您使用反向代理,您可以直接访问 tomcat 吗?
-
@MarcoA.Hernandez:是的,都是 https。不允许使用 http。我们也无法访问 Tomcat
-
你能创建一个简单的html页面来测试websocket,然后交给Tomcat的所有者来测试直接连接吗?另外,你有没有tomcat的部署日志来检查是否有问题?