带有Java ECONNREFUSED的Heroku Websockets(连接被拒绝)

时间:2015-05-30 17:37:52

标签: java heroku java-server java-websocket

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

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

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

作为我的websocket服务器的端口,我尝试使用 8080 以及 5000 8000 之间的许多其他人。

我只能猜测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

3 个答案:

答案 0 :(得分:6)

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

  1. 使用Java创建您的Web套接字服务器,实现取决于您,您可以使用javax或Jetty websockets或TooTallNate-Java-Websockets,我已经使用了Jetty。这是我的implementation 。我遵循了this示例。
  2. 连接到heroku上的Web套接字时,请使用以下方案 ws:// + yourHerokuAppAdress + yourSocketEndpoint 。端点是你的websocket正在监听的相对地址,在我的例子中它是" / socket" 。无需指定端口!

答案 1 :(得分:4)

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

  

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

有关详情,请参阅:https://devcenter.heroku.com/articles/runtime-principles#web-servers

答案 2 :(得分:0)

您可能只需要设置 REDIS_URL。就我而言,它在 REDISCLOUD_URL 中。