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

Posted

技术标签:

【中文标题】带有 Java ECONNREFUSED 的 Heroku Websockets(连接被拒绝)【英文标题】:Heroku Websockets with Java ECONNREFUSED (Connection refused) 【发布时间】:2015-08-13 11:38:39 【问题描述】:

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

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

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

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

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

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

编辑

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

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

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

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

【问题讨论】:

您是否将您的应用程序绑定到 Heroku 上的 $PORT 环境变量?你说你正在尝试 5000 到 8000 之间的端口。是在 Heroku 上吗? 在 Proc 文件中绑定 $PORT 环境变量是什么意思?不。我应该吗? 【参考方案1】:

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

    使用Java创建你的web socket服务器,实现由你决定,你可以使用javax或者Jetty websockets或者TooTallNate-Java-Websockets,我用过Jetty。这是我的implementation 。我已经关注了this 的例子。 当连接到 Heroku 上的 Web 套接字时,请使用以下方案 ws:// + yourHerokuAppAdress + yourSocketEndpoint 。端点是您的 websocket 正在侦听的相对地址,在我的情况下是 "/socket" 。无需指定端口!

【讨论】:

嘿,我正在 Heroku 上部署我的 java websocket 应用程序。一切都很好,但我无法使用 java 客户端连接到它(如果部署在本地主机上,它可以工作)它给出了javax.websocket.DeploymentException: Handshake error 我在本地主机上使用ws://localhost:8080/Dashboard/hellows://host_name/Dashboard/hello【参考方案2】:

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

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

更多信息请见:https://devcenter.heroku.com/articles/runtime-principles#web-servers

【讨论】:

谢谢,我试试。但这是否意味着我不能使用任何其他端口?如果我需要 3 个不同的端口来监听呢? Heroku 支持每个应用程序进程一个端口。您需要在应用程序中使用不同的路由,而不是为 WS 使用不同的端口。有第三方tools for exposing auxiliary ports 但可能不适合这种情况。 我刚刚使用本地 $PORT 环境变量进行了测试。没有任何区别 :( 请在问题中查看我的更新,如果需要,我可以提供更多详细信息。 好的,我成功了!有趣的部分是我不必向我的 wss 连接添加任何端口! :) 现在就是这样:“wss://test-websocket-again.herokuapp.com/events/” :)【参考方案3】:

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

【讨论】:

以上是关于带有 Java ECONNREFUSED 的 Heroku Websockets(连接被拒绝)的主要内容,如果未能解决你的问题,请参考以下文章

@mysql/xdevapi ECONNREFUSED 不释放连接

Nodejs和java套接字实现错误:连接ECONNREFUSED 127.0.0.1:8081 [重复]

java.net.ConnectException:无法连接到 localhost/127.0.0.1(端口 8080):连接失败:ECONNREFUSED ....(代号一个应用程序)

开玩笑测试通过但得到错误:最后连接 ECONNREFUSED 127.0.0.1:80

无法运行量角器 - ECONNREFUSED 连接 ECONNREFUSED

heroku ECONNREFUSED:为所有运行命令连接 ECONNREFUSED