12

我正在使用 Java 编写一个小型游戏服务器。

我使用TooTallNate-Java-Websockets库来创建我的 websocket 服务器。当我在 localhost 上运行我的服务器时,一切正常,我可以从任何地方连接到它。但是,当我将我的应用程序提交到 Heroku 时,每次我尝试建立套接字连接时,都会收到错误ECONNREFUSED (Connection denied)

值得一提的是,当我使用应该模拟 heroku 环境的工头运行我的应用程序时,一切正常。

作为我的 websocket 服务器的端口,我尝试使用8080和许多其他在50008000之间的端口。

我只能猜测 heroku 上发生了什么,因为日志只包含 http 请求的基本信息。

请帮忙,我快要放弃了:(

编辑

这是我的 Proc 文件中的内容:

web: ./build/install/my-app/bin/my-app

更新 创建了一个简单的抽象应用程序来展示问题:(当然是在工头中测试的,它在本地环境中工作)

  1. 我的 html/js 测试器:Testerpage
  2. 我的主要 java Jetty 服务器:Java Main
  3. 控制台错误消息: WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
4

3 回答 3

6

我正在回答我自己的问题,以分享我是如何设法连接到 Heroku 上的 Java websocket 服务器的。

  1. 使用 Java 创建您的 Web 套接字服务器,实现由您决定,您可以使用 javax 或 Jetty websockets 或TooTallNate-Java-Websockets,我使用过 Jetty。这是我的实现。我遵循了这个例子。
  2. 当连接到 Heroku 上的 Web 套接字时,使用以下方案ws:// + yourHerokuAppAdress + yourSocketEndpoint。端点是您的 websocket 正在侦听的相对地址,在我的例子中是"/socket"。无需指定端口!
于 2015-06-09T07:48:32.363 回答
4

您必须使用 Heroku 设置为$PORTenv var 的端口:

在 Heroku 上,应用程序是完全独立的,不依赖于将 web 服务器运行时注入到执行环境中来创建面向 web 的服务。每个 Web 进程都简单地绑定到一个端口,并监听来自该端口的请求。Heroku 将要绑定的端口分配为 PORT 环境变量。

有关更多信息,请参阅:https ://devcenter.heroku.com/articles/runtime-principles#web-servers

于 2015-06-02T14:57:45.553 回答
0

你可能只需要REDIS_URL设置。在REDISCLOUD_URL我的情况下。

于 2021-04-02T19:37:16.260 回答