问题 使用Java ECONNREFUSED的Heroku Websockets(连接被拒绝)


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

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

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

作为我的websocket服务器的端口,我试图使用 8080 和其他许多人之间的范围 5000 至 8000

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

请帮忙,我接近放弃:(

编辑

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

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

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

  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

9651
2018-05-30 17:37


起源

你绑定你的应用程序了吗? $PORT Heroku上的env var?你说你正在尝试5000到8000之间的端口。那是在Heroku吗? - codefinger
在Proc文件中绑定$ PORT env var是什么意思?不,我应该吗? - Ivelius


答案:


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

  1. 使用Java创建您的Web套接字服务器,实现取决于您,您可以使用javax或Jetty websockets或 TooTallNate-Java的的WebSockets ,我用过Jetty。这是我的 履行  。我跟着 这个 例。
  2. 在heroku上连接到Web套接字时,请使用以下方案 ws:// + yourHerokuAppAdress + yourSocketEndpoint 。端点是你的websocket正在监听的相对地址,就我的情况而言 “/插座” 。无需指定端口!

6
2018-06-09 07:48



嘿,我正在heroku上部署我的java websocket应用程序。一切都很好,但我无法使用java客户端(如果部署在localhost上,它可以工作)连接到它 javax.websocket.DeploymentException: Handshake error - shriyog
我用了 ws://localhost:8080/Dashboard/hello 在当地主持人和 ws://host_name/Dashboard/hello - shriyog
你救了我的命。非常感谢 - temnoi


您必须使用Heroku设置的端口作为 $PORT env var:

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

欲了解更多信息: https://devcenter.heroku.com/articles/runtime-principles#web-servers


4
2018-06-02 14:57



谢谢,我会试试。但这是否意味着我不能使用任何其他端口?如果我需要3个不同的端口来收听怎么办? - Ivelius
Heroku支持每个应用程序进程一个端口。您需要在应用中使用不同的路径,而不是为WS使用不同的端口。有第三方 用于暴露辅助端口的工具 但这可能不适合这种情况。 - codefinger
我刚刚使用本地$ PORT环境变量进行测试。没有任何区别:(请在一个问题中查看我的更新,如果需要,我可以提供更多详细信息。 - Ivelius
好的,我已经成功了!有趣的是我没有为我的wss连接添加任何端口! :)就像现在这样:“wss://test-websocket-again.herokuapp.com/events/”:) - Ivelius