【问题标题】:Websockets not working on deployed Tomcat Server on Google Compute EngineWebsockets 无法在 Google Compute Engine 上部署的 Tomcat 服务器上运行
【发布时间】:2018-03-26 19:51:36
【问题描述】:

对于使用 websockets 部署应用程序来说是全新的,所以我觉得我错过了一些东西。我在 Debian 8 实例上使用 Tomcat 8.5。我在 GCE 上部署它的步骤:

  1. 使用 Click to Deploy for Tomcat。
  2. 已将我的 .war 文件上传到部署的站点。
  3. 将实例的 IP 提升为静态。
  4. 在端口 80 上添加了防火墙规则,目标为“websocket”
  5. 在服务器实例的实例组上做了一个负载均衡器。 (不太确定这是否有帮助,或者我是否设置正确)

负载均衡器看起来像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:// vs wss://)、上下文根。但是根据您提供的信息,我看不到更多信息。万一,网页等其他资源是否可以访问?

标签: java apache tomcat websocket google-compute-engine


【解决方案1】:

在我的情况下,当我在没有导出任何源文件的情况下部署战争时它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 2017-08-11
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2015-09-07
    相关资源
    最近更新 更多