Heroku Node.js + Socket.io:部署到Heroku后,我得到一个ERR
这是我在我的live node.js heroku app上的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');
请记住,当您使用var server = app.listen(process.env.PORT || 3000)
时,您没有在Heroku上的端口3000上运行。 Heroku将为您设置PORT环境变量,并为外部世界设置端口为80。
Heroku Node.js + Socket.io:部署到Heroku后,我得到一个ERR
这是我在我的live node.js heroku app上的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');
请记住,当您使用var server = app.listen(process.env.PORT || 3000)
时,您没有在Heroku上的端口3000上运行。 Heroku将为您设置PORT环境变量,并为外部世界设置端口为80。