簡體   English   中英

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

[英]Heroku Node.js + Socket.io: After deploying to Heroku, I get a ERR_CONNECTION_REFUSED

這是我在實時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中的環境(如果那里什么都沒有)。 以下是我相關的server.js代碼和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。

當你這樣連接

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM