对于使用 websockets 部署应用程序来说是全新的,所以我觉得我错过了一些东西。我在 Debian 8 实例上使用 Tomcat 8.5。我在 GCE 上部署它的步骤:
- 使用 Tomcat 的点击部署。
- 将我的 .war 文件上传到已部署的站点。
- 将实例的 IP 提升为静态 IP。
- 在端口 80 上添加了目标为“websocket”的防火墙规则
- 在服务器实例的实例组上创建了一个负载平衡器。 (不太确定这是否有帮助,或者我是否设置正确)
负载均衡器看起来像 this .
我的 javascript 像这样创建 websocket(VDMServer 是 .war 的名称):
var websocket = new WebSocket("ws://[EXTERNALIP]/VDMServer/gameServerEndpoint");
下面是我创建服务器端点类的方式:
@ServerEndpoint("/gameServerEndpoint")
public class GameServerEndpoint {
...
}
我能够通过虚拟实例的外部 IP 访问网站和我的应用程序页面,但即使尝试 Tomcat 的 websocket 示例也会出现错误:
Error during WebSocket handshake: Unexpected response code: 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 时它起作用了。
关于java - Websockets 无法在 Google Compute Engine 上部署的 Tomcat 服务器上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750880/