我已经按照这个非常基本的教程来设置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
我的问题是:如何在没有任何其他框架的情况下部署相同的内容,以及我应该采用哪些程序才能使其工作?
答案 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文件的最佳方法:
但有一个问题,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复制到战争中。将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/
答案 1 :(得分:0)
Heroku不需要Play框架来使用Websockets。这只是一个例子。只要您的Oracle教程中的应用程序绑定到$PORT
,它就可以正常工作。