具有 Java ECONNREFUSED 的 Heroku Websockets(连接被拒绝)
Heroku Websockets with Java ECONNREFUSED (Connection refused)
我正在使用 Java 编写一个小型游戏服务器。
我使用 TooTallNate-Java-Websockets 库来创建我的 websocket 服务器。
当我 运行 我的服务器在 localhost 时一切正常,当我将我的应用程序提交到 Heroku 时,我可以从 everywhere.However 连接到它,每次我尝试建立套接字连接时我都会收到错误 ECONNREFUSED(连接被拒绝).
值得一提的是,当我 运行 将我的应用程序与本应模拟 heroku 环境的 foreman 结合使用时,一切正常。
作为我的 websocket 服务器的端口,我尝试使用 8080 和 5000 到 之间的许多其他端口8000.
我只能猜测 heroku 上发生了什么,因为日志只包含 http 请求的基本信息。
请帮忙,我快要放弃了:(
编辑
这是我的 Proc 文件中的内容:
web: ./build/install/my-app/bin/my-app
更新
创建了一个简单的抽象应用程序来展示问题:
(当然是在 foreman 测试过,在本地环境下也能正常工作)
- 我的 html/js 测试员:Testerpage
- 我的主要 java 码头服务器:Java Main
- 控制台错误消息:
WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
您必须使用 Heroku 设置为 $PORT
环境变量的端口:
On Heroku, apps are completely self-contained and do not rely on runtime injection of a webserver into the execution environment to create a web-facing service. Each web process simply binds to a port, and listens for requests coming in on that port. The port to bind to is assigned by Heroku as the PORT environment variable.
更多请看:https://devcenter.heroku.com/articles/runtime-principles#web-servers
我正在回答我自己的问题,以分享我如何设法连接到 Heroku 上的 Java websocket 服务器。
- 使用 Java 创建您的网络套接字服务器,实现由您决定,您可以使用 javax 或 Jetty websockets 或 TooTallNate-Java-Websockets , I've used Jetty. Here is my implementation . I have followed this 示例。
- 当连接到 heroku 上的网络套接字时,请使用以下方案 ws:// + yourHerokuAppAdress + yourSocketEndpoint 。端点是你的 websocket 正在监听的相对地址,在我的例子中是 "/socket" 。无需指定端口 !
您可能只需要设置 REDIS_URL
。在我的例子中是 REDISCLOUD_URL
。
我正在使用 Java 编写一个小型游戏服务器。
我使用 TooTallNate-Java-Websockets 库来创建我的 websocket 服务器。 当我 运行 我的服务器在 localhost 时一切正常,当我将我的应用程序提交到 Heroku 时,我可以从 everywhere.However 连接到它,每次我尝试建立套接字连接时我都会收到错误 ECONNREFUSED(连接被拒绝).
值得一提的是,当我 运行 将我的应用程序与本应模拟 heroku 环境的 foreman 结合使用时,一切正常。
作为我的 websocket 服务器的端口,我尝试使用 8080 和 5000 到 之间的许多其他端口8000.
我只能猜测 heroku 上发生了什么,因为日志只包含 http 请求的基本信息。
请帮忙,我快要放弃了:(
编辑
这是我的 Proc 文件中的内容:
web: ./build/install/my-app/bin/my-app
更新 创建了一个简单的抽象应用程序来展示问题: (当然是在 foreman 测试过,在本地环境下也能正常工作)
- 我的 html/js 测试员:Testerpage
- 我的主要 java 码头服务器:Java Main
- 控制台错误消息:
WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
您必须使用 Heroku 设置为 $PORT
环境变量的端口:
On Heroku, apps are completely self-contained and do not rely on runtime injection of a webserver into the execution environment to create a web-facing service. Each web process simply binds to a port, and listens for requests coming in on that port. The port to bind to is assigned by Heroku as the PORT environment variable.
更多请看:https://devcenter.heroku.com/articles/runtime-principles#web-servers
我正在回答我自己的问题,以分享我如何设法连接到 Heroku 上的 Java websocket 服务器。
- 使用 Java 创建您的网络套接字服务器,实现由您决定,您可以使用 javax 或 Jetty websockets 或 TooTallNate-Java-Websockets , I've used Jetty. Here is my implementation . I have followed this 示例。
- 当连接到 heroku 上的网络套接字时,请使用以下方案 ws:// + yourHerokuAppAdress + yourSocketEndpoint 。端点是你的 websocket 正在监听的相对地址,在我的例子中是 "/socket" 。无需指定端口 !
您可能只需要设置 REDIS_URL
。在我的例子中是 REDISCLOUD_URL
。