Java Spring MVC WebSocket应用程序仅适用于本地应用程序服务器,但不适用于openshift主机

时间:2016-05-17 16:14:30

标签: java spring-mvc tomcat websocket openshift

我尝试使用Spring MVC进行简单的websocket聊天 源代码可在GitHub上的我的存储库中找到 它由以下部分组成:
欢迎视图页面index.jsp包含用户输入的昵称和密码以及将其绑定到新用户实例的表单。

Welcome page

用户实例传递给Spring MVC控制器MainController.java。 Controller创建链接到chat.jsp的新ModelAndView,并将User实例传递给它,以便在标题和聊天窗口中显示用户的昵称。 chat.jsp包含提供与Chat.java中的websocket端点的连接的js代码。它还将用户的nikname传递给端点,以将其存储在String字段中 当我在我的本地Tomcat 8上尝试它时,一切正常,就像预期一样。

working chat

这是websocket端点连接的请求和响应。 enter image description here

但是当我在OpenShift的Tomcat 7远程主机上试用它时,它无法正常工作。
以下是截图:

enter image description here enter image description here

正如您所看到的,用户的昵称未显示在标头中,并且未通过请求网址传递到端点。
似乎即使User实例还没有从Spring MVC控制器传递到chat.jsp视图页面 有人可以解释一下我做错了吗?

2 个答案:

答案 0 :(得分:2)

我在那里看到两个问题:

  1. Ws和wss端口 - use ports 8000 or 8443用于OpenShift上的Web套接字连接。我建议修改您的chat.jsp

    Chat.initialize = function () {
      if (window.location.protocol == 'http:') {
        Chat.connect('ws://' + window.location.host + ':8000/websocket/chat/${user.nickname}');
      } else {
        Chat.connect('wss://' + window.location.host + ':8443/websocket/chat/${user.nickname}');
      }
    };
    
  2. Tomcat服务器版本。您可以使用this quick-start在OpenShift Online上运行Tomcat 8。然而,当我尝试使用快速启动时,我遇到了一些麻烦所以我改变了一些东西并创建了PR;在它合并之前,您可以从here获取适合我的版本。为了在小型DIY设备上部署Tomcat 8,您可以使用以下命令:rhc app create tomcat8 diy --from-code https://github.com/jiri-fiala/openshift-tomcat8-quickstart。将tomcat8替换为您的应用所需的名称。请注意,下载和编译Tomcat 8需要几分钟时间。

  3. 在OpenShift上运行Tomcat 8后,我使用Tomcat的Web界面将代码部署为ROOT.war(我使用mvn package在本地创建了一个包)。测试聊天应用似乎没问题。

    当然,这不是一个理想的部署; Web应用程序以这种方式部署到数据目录。 OpenShift Online目前不提供Tomcat 8盒式磁带,您可以将代码推送到repo中,并自动构建和部署Web应用程序。

答案 1 :(得分:0)

一个问题已经解决。现在,用户昵称显示在视图标题中,并且还通过连接请求传递给websocket端点 我刚刚在chat.jsp中添加了一行failed -- The following template(s) are/is missing: components/common/forms components/common/icons 以使表达式语言正常工作。出于某种原因,如果你使用Tomacat 7是必要的。
所以现在在将端口号添加到websocket端点连接请求后,我得到了这个: enter image description here enter image description here
但是聊天仍然无法正常工作,因为连接在建立后就已经关闭了。