node.js - 来自 socket.io 的 ERR_CONNECTION_REFUSED
问题描述
我正在尝试运行 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 我假设端口确实是开放的。
我不知道是什么导致了这个错误。
解决方案
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
是您的应用程序实际运行的机器(应用程序和浏览器在同一台机器上)。
推荐阅读
- python - 如何解决python keyerror
- python - spyder-anaconda 在安装 ax-platform lib 后突然停止工作
- javascript - 不存在的对象字段不会引发语法错误
- typescript - IDE - 在库/桶之间移动文件时自动更新导入
- reactjs - 如何在 iis 上部署 React Next.JS?
- python-3.x - 为什么 subprocess.check_output 会引发错误 CalledProcessError
- angular - 为什么同一个对象根据访问方式有 2 个不同的值?
- python - scikit-learn:按名称选择列的转换器
- javascript - 如何在 p5.js 中的点数组之间绘制正方形?
- ios - 在 crashlytics swift/ios 中具有非常大的行号值的 EXC_BREAKPOINT