首页 > 解决方案 > 来自 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 我假设端口确实是开放的。

我不知道是什么导致了这个错误。

标签: node.jssocketssocket.io

解决方案


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是您的应用程序实际运行的机器(应用程序和浏览器在同一台机器上)。


推荐阅读