如何在没有任何其他框架的情况下在Heroku上部署和访问Java WebSocket端点

cod*_*dde 7 java deployment heroku endpoint websocket

我已经按照这个非常基本的教程来设置Java中的WebSocket端点:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/HomeWebsocket/WebsocketHome.html

然而,Heroku希望我依赖Play Framework:https://devcenter.heroku.com/articles/play-java-websockets

我的问题是:如何在没有任何其他框架的情况下部署相同的内容,我应该通过哪些程序才能使其工作?

Ray*_*lha 2

你遇到的问题是这样的:

您遵循的教程是针对 GlassFish 应用程序服务器编写的,但 Heroku 仅支持 Tomcat 8 和 Jetty。请参阅此处: https: //devcenter.heroku.com/articles/war-deployment

但不用担心,我移植并测试了该教程以在 Tomcat 8 上运行。

我还添加了 javax.json 规范的 glassfish 实现。(确保下载实现而不是规范接口)您可以在这里找到它:http ://central.maven.org/maven2/org/glassfish/javax.json/1.0.4/

我还注意到为什么你的index.html在本地不起作用:我认为这是因为WebSocket URL被硬编码在websocket.js文件中。我冒昧地通过使其动态化来解决这个问题。

以下是完整的 NetBeans 8.0.2 项目:
http://ray.hulha.net/WebsocketHome.zip

以下是从 NetBeans 7 或 8 内部创建 war 文件的最佳方法:
在此输入图像描述

然而有一个问题,Heroku 上的 Tomcat 8 缺少 websocket 插件。

但不用担心,您可以手动将其添加到 war 文件中。步骤如下:

  1. 在此处下载 Tomcat websocket 插件:
    http://central.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/8.0.29/tomcat-embed-websocket-8.0.29.jar

  2. war 文件实际上只是一个 zip 文件。所以我使用7-zip打开war文件。然后导航到 war 文件内的 WEB-INF/lib 文件夹。

  3. 将罐子复制到战争中。将 tomcat-embed-websocket-8.0.29.jar 拖放到 7-Zip 内的 war 文件的 lib 文件夹中。

  4. Z-Zip 会询问您是否确实要将 jar 复制到 war 文件中。说是。

以下是已编译的 war 文件,其中包含准备在 Heroku 上部署的 tomcat-embed-websocket-8.0.29.jar:http: //ray.hulha.net/WebsocketHome.war

我使用这个命令来部署它:

heroku war:deploy WebsocketHome.war --app websockethome
Run Code Online (Sandbox Code Playgroud)

确保将最后的应用程序名称替换为您的应用程序名称。

这是工作结果: http: //websockethome.herokuapp.com/

在此输入图像描述