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

但是,Heroku希望我依靠Play框架:https://devcenter.heroku.com/articles/play-java-websockets

我的问题是:如何在没有任何其他框架的情况下部署相同的组件?为了使一切正常运行,我应该经历什么过程?

最佳答案

您遇到的问题是:

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

但请放心,我移植并测试了可在Tomcat 8上运行的教程。

我还添加了javax.json规范的glassfish实现。
(请确保下载实现,而不是仅下载规范接口(interface))
您可以在这里找到它: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文件的最佳方法:
java - 如何在Heroku上部署和访问Java WebSocket终结点而无需任何其他框架-LMLPHP

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

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

  • 在此处下载Tomcat websocket插件:
    http://central.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/8.0.29/tomcat-embed-websocket-8.0.29.jar
  • war文件实际上只是一个zip文件。因此,我使用7-zip打开了war文件。然后导航到war文件中的WEB-INF/lib文件夹。
  • 将jar复制到 war 中。将tomcat-embed-websocket-8.0.29.jar拖放到7-Zip内war文件的lib文件夹中。
  • 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
    

    确保最后用您的应用名称替换应用名称。

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

    java - 如何在Heroku上部署和访问Java WebSocket终结点而无需任何其他框架-LMLPHP

    关于java - 如何在Heroku上部署和访问Java WebSocket终结点而无需任何其他框架,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49841902/

    10-14 11:24