Heroku Node.js + Socket.io:部署到 Heroku 后,我得到一个 ERR_CONNECTION_REFUSED

Posted

技术标签:

【中文标题】Heroku Node.js + Socket.io:部署到 Heroku 后,我得到一个 ERR_CONNECTION_REFUSED【英文标题】:Heroku Node.js + Socket.io: After deploying to Heroku, I get a ERR_CONNECTION_REFUSED 【发布时间】:2018-06-07 19:42:41 【问题描述】:

这是我在实时 node.js heroku 应用程序的 Web 控制台中收到的错误消息:polling-xhr.js:264 GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=M2MDZUw net::ERR_CONNECTION_REFUSED

当我在本地运行我的程序时,一切正常,没有任何问题。我已经列出了服务器来监听环境中的任何内容PORT 或端口3000(如果那里什么都没有)。下面是我的相关@​​987654327@代码和package.json代码,以及用于连接服务器的客户端代码。

server.js

var express = require("express");
var socket = require("socket.io");

var app = express();
var server = app.listen(process.env.PORT || 3000)

package.json


  "name": "testProject",
  "version": "1.0.0",
  "description": "test project using node.js + sockets.io",
  "main": "server.js",
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "keywords": [
    "sockets",
    "p5",
    "node"
  ],
  "author": "henry zhu",
  "license": "ISC",
  "dependencies": 
    "express": "^4.16.2",
    "socket.io": "^2.0.4"
  

连接服务器的客户端代码:

var socket = io.connect("http://localhost:3000");

我在客户端使用的socket.io版本是2.0.4。

【问题讨论】:

***.com/questions/27393705/… , github.com/socketio/socket.io-client/issues/1097 , github.com/socketio/socket.io-client/issues/1053 @MikaS 浏览器的连接码是什么意思? 我认为他指的是连接到服务器的前端(客户端)的代码。请包括您在客户端使用的socket.io 版本。 @SarathMS 我已经更新了连接到服务器的前端代码和我在客户端使用的 socket.io 版本。 【参考方案1】:

当你像这样连接时

var socket = io.connect("http://localhost:3000");

在客户端,您实际上是在尝试通过端口 3000 连接到您自己的计算机。如果您在计算机上启动服务器,它们甚至可能开始通信。但是,您想连接到您在 Heroku 上托管的服务器。如果客户端与服务器在同一个域上提供服务,您可以简单地做

var socket = io();

然后,套接字将连接到它所服务的端口(通常是 80)上的自己的域。它适用于本地和 Heroku。如果你想改变端口,你可以使用:

var socket = io(':3000');

如果客户端由另一个服务器而不是套接字服务器提供服务,则您必须提供整个 URL:

var socket = io('https://example.herokuapp.com');

请记住,当您使用 var server = app.listen(process.env.PORT || 3000) 时,您并没有在 Heroku 的 3000 端口上运行。 Heroku 会为你和外界设置 PORT 环境变量,端口是 80。

【讨论】:

以上是关于Heroku Node.js + Socket.io:部署到 Heroku 后,我得到一个 ERR_CONNECTION_REFUSED的主要内容,如果未能解决你的问题,请参考以下文章

Heroku + node.js:我有一个使用多个端口的服务器。如何让 Heroku 分配它们?

从 Heroku 上的 Node.js 连接到 CloudSQL

部署 Node.js 应用程序时出现 Heroku 错误

Heroku 中的 Node.js

Heroku 最佳实践时钟与 node.js

Heroku cedar 堆栈上的 Node.js 端口问题