我正在尝试运行Node.js应用程序。使用SSH,我可以运行'node server.js':
var express = require('express');
var app = express();
var server = app.listen(5431);
app.use(express.static('public'));
console.log("### RUNNING ###");
var socket = require('socket.io');
var io = socket(server);
,它确实记录并没有引发任何错误。但是,当我打开客户端浏览器应用程序时,会在控制台中得到以下输出:
Failed to load resource: net::ERR_CONNECTION_REFUSED
GET http://localhost:5431/socket.io/?EIO=3&transport=polling&t=MWCsv9T net::ERR_CONNECTION_REFUSED
客户端连接:
var socket = io.connect('http://localhost:5431');
我尝试使用IP和域进行连接,但结果相同。应用在本地计算机上运行良好。
我已经使用以下php脚本检查了开放端口:
for($i=0; $i<10000; $i++) {
portCheck($i);
}
function portCheck($port) {
if(stest('127.0.0.1', $port))
echo $port . "<br>";
}
function stest($ip, $portt) {
$fp = @fsockopen($ip, $portt, $errno, $errstr, 0.1);
if (!$fp) {
return false;
} else {
fclose($fp);
return true;
}
}
我确实得到了:
它列出了5431,所以我假设该端口确实是开放的。
我不知道什么会导致此错误。
答案 0 :(得分:0)
var socket = io.connect('http://localhost:5431');
这意味着客户端将连接到本地计算机-从脚本执行系统的角度来看,其中本地。由于脚本是在浏览器中执行的,这意味着您的应用程序应在运行浏览器的客户端计算机上运行。
Failed to load resource: net::ERR_CONNECTION_REFUSED
GET http://localhost:5431/socket.io/?EIO=3&transport=polling&t=MWCsv9T net::ERR_CONNECTION_REFUSED
虽然您没有明确地说出这一点,但稍后的一条语句(请参阅下文)表明,此操作是在与应用程序运行所在的不同计算机上完成的。如果您的应用程序在主机A上运行,而浏览器在主机B上运行,则客户端浏览器中(执行脚本的位置)内的localhost
是指主机B,而不是主机A。
应用在本地计算机上运行良好
这是可以预期的,因为在这种情况下,localhost
是您的应用程序实际运行所在的计算机(应用程序和浏览器在同一台计算机上)。