【发布时间】:2018-03-26 19:51:36
【问题描述】:
对于使用 websockets 部署应用程序来说是全新的,所以我觉得我错过了一些东西。我在 Debian 8 实例上使用 Tomcat 8.5。我在 GCE 上部署它的步骤:
- 使用 Click to Deploy for Tomcat。
- 已将我的 .war 文件上传到部署的站点。
- 将实例的 IP 提升为静态。
- 在端口 80 上添加了防火墙规则,目标为“websocket”
- 在服务器实例的实例组上做了一个负载均衡器。 (不太确定这是否有帮助,或者我是否设置正确)
负载均衡器看起来像this。
我的 javascript 像这样创建 websocket(VDMServer 是 .war 的名称):
var websocket = new WebSocket("ws://[EXTERNALIP]/VDMServer/gameServerEndpoint");
这是我制作服务器端点类的方法:
@ServerEndpoint("/gameServerEndpoint")
public class GameServerEndpoint {
...
}
我可以通过虚拟实例的外部 IP 和我的应用程序的页面访问网站,但即使尝试 Tomcat 的 websocket 示例也会出现错误:
WebSocket 握手期间出错:意外响应代码:404
这也是我 server.xml 中的连接器在 /var/lib/tomcat8/conf 中的样子:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
还看到了关于不包括 javax websocket 库的解决方案,所以我确保不这样做。 Here's what my .war's lib folder looks like. 这应该不会影响 tomcat 的例子吧?
非常感谢您对此案的任何帮助,昨天一整天都在寻找解决此问题的方法。谢谢!
【问题讨论】:
-
简单问题:.war 文件的名称 (
VDMServer) 是否也是您部署应用程序时的上下文根? -
@Al1 是的,这就是 Tomcat 管理器中的“/VDMServer”。
-
该错误清楚地表明您的网址不正确。经典错误是:错误的端口、错误的方案(
ws://vswss://)、上下文根。但是根据您提供的信息,我看不到更多信息。万一,网页等其他资源是否可以访问?
标签: java apache tomcat websocket google-compute-engine