来自socket.io的ERR_CONNECTION_REFUSED

时间:2019-01-02 04:53:41

标签: node.js sockets socket.io

我正在尝试运行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;
    }
  }

我确实得到了:

enter image description here

它列出了5431,所以我假设该端口确实是开放的。

我不知道什么会导致此错误。

1 个答案:

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