如何在没有任何额外框架的情况下在 Heroku 上部署和访问 Java WebSocket 端点
How to deploy and access a Java WebSocket endpoint on Heroku without any additional frameworks
我已经按照这个非常基本的教程在 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
我的问题是:我如何在没有任何额外框架的情况下部署它?我应该通过什么程序才能使事情正常进行?
Heroku 不需要 Play 框架来使用 Websockets。那只是一个例子。只要 Oracle 教程中的应用程序绑定到 $PORT
,它就应该可以工作。
您遇到的问题是:
您遵循的教程是针对 GlassFish Application Server 制作的,但 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 文件中。
以下是步骤:
在此处下载 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 文件,其中包含 tomcat-embed-websocket-8.0.29.jar 准备在 Heroku 上部署:
http://ray.hulha.net/WebsocketHome.war
我使用这个命令来部署它:
heroku war:deploy WebsocketHome.war --app websockethome
确保将最后的应用名称替换为您的应用名称。
这是工作结果:
http://websockethome.herokuapp.com/
我已经按照这个非常基本的教程在 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
我的问题是:我如何在没有任何额外框架的情况下部署它?我应该通过什么程序才能使事情正常进行?
Heroku 不需要 Play 框架来使用 Websockets。那只是一个例子。只要 Oracle 教程中的应用程序绑定到 $PORT
,它就应该可以工作。
您遇到的问题是:
您遵循的教程是针对 GlassFish Application Server 制作的,但 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 文件中。 以下是步骤:
在此处下载 Tomcat websocket 插件:
http://central.maven.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/8.0.29/tomcat-embed-websocket-8.0.29.jarwar 文件实际上只是一个 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 文件,其中包含 tomcat-embed-websocket-8.0.29.jar 准备在 Heroku 上部署: http://ray.hulha.net/WebsocketHome.war
我使用这个命令来部署它:
heroku war:deploy WebsocketHome.war --app websockethome
确保将最后的应用名称替换为您的应用名称。
这是工作结果: http://websockethome.herokuapp.com/