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

时间:2018-04-15 12:27:54

标签: java heroku deployment websocket endpoint

我已经按照这个非常基本的教程来设置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

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

2 个答案:

答案 0 :(得分:2)

你遇到的问题是:

您遵循的教程是为GlassFish Application Server制作的,但Heroku仅支持Tomcat 8和Jetty。见这里:https://devcenter.heroku.com/articles/war-deployment

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

我还添加了javax.json规范的glassfish实现。 (确保只下载实现而不是spec规范接口) 您可以在此处找到它: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文件的最佳方法:
enter image description here

但有一个问题,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. 将jar复制到战争中。将tomcat-embed-websocket-8.0.29.jar拖放到7-Zip内的war文件的lib文件夹中。

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

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

    我用这个命令来部署它:

    heroku war:deploy WebsocketHome.war --app websockethome
    

    请务必使用您的应用名称替换最终的应用名称。

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

    enter image description here

答案 1 :(得分:0)

Heroku不需要Play框架来使用Websockets。这只是一个例子。只要您的Oracle教程中的应用程序绑定到$PORT,它就可以正常工作。