java - 如何在没有任何额外框架的情况下在 Heroku 上部署和访问 Java WebSocket 端点

标签 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

我的问题是:我如何在没有任何额外框架的情况下部署相同的东西,我应该通过什么程序才能使事情正常进行?

最佳答案

你遇到的问题是这样的:

您遵循的教程是针对 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 文件的最佳方法:
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 复制到 war 中。将 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

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

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

enter image description here

关于java - 如何在没有任何额外框架的情况下在 Heroku 上部署和访问 Java WebSocket 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841902/

相关文章:

ruby-on-rails - Gemfile.lock 应该致力于 Windows 上的源代码管理吗?

spring-boot - 部署时 Maven 没有运行我的 mockito 测试

ruby-on-rails-3 - 在 Deamhost 上部署 Ruby on rails 失败

php - SugarCRM 中自定义模块的部署流程

java - Hibernate映射不成功-不知道错误发生在哪里

java - 获得堆栈溢出是否只影响它发生的线程?

heroku - 如何将多个github帐户链接到一个heroku帐户?

node.js - 将 Node.js Docker 从本地(Apple M1)推送到 Heroku 时,继续遇到相同的部署错误(Exec Format Error)

java - 没有 Java 实现的接口(interface)

java - 当 JEditorPane 不会做。 JRex,JRex 为什么你是 JRex?