【问题标题】:ERR_CONNECTION_REFUSED http://localhost:3000/socket.io/socket.io.jsERR_CONNECTION_REFUSED http://localhost:3000/socket.io/socket.io.js
【发布时间】:2016-03-18 17:05:06
【问题描述】:

Ciao,我正在实现一个 webRTC 多对多视频会议系统,实际上,我已经做到了,我正在使用 socket.IO 作为信令服务器,一切都非常顺利,我正在使用 EnterpriseDB Apache 为我的.html 文件在端口(8081)和 Node.js 用于在端口(3000)上服务 socket.IO,它在 localhost 中像魅力一样工作,没有错误,我的 ISSUE 正在使用我的公共 IP 进行外部访问,我正在测试我的朋友和这些浏览服务:www.browserstack.com 和 www.browserling.com(试用版)。

  • 在 www.browserstack.com 上,mozilla 42 或 chrome 47 一切正常

  • 使用 www.browserling.com,我收到了这些错误

    Firefox 41: ReferenceError: io is not defined

    Chrome 45:无法加载资源 http://localhost:3000/socket.io/socket.io.js 净::ERR_CONNECTION_REFUSED Uncaught ReferenceError: io is not defined

  • 我的朋友们遇到了与 www.browserling.com 相同的问题,但他们使用最新的浏览器版本(Chrome 47 和 Firefox 42)连接到我的 PC 服务器。

我认为这不是浏览器版本问题,问题在于提供 socket.io.js 文件,最后,这是我的代码:

它只显示了解决此问题的重要事项:

///NODE.JS DIRECTORY
////////////////////serverside.js
var port = 3000;
var io = require('socket.io').listen(port);
io.sockets.on('connection', function (socket){.........}


///APACHE DIRECTORY
////////////////////clientside.js 
//Connect to signalling server   
var socket = io.connect("http://localhost:3000");

////////////////////avq.html
<!DOCTYPE html>

<html lang="es">

    <head><meta charset="UTF-8">
    </head> 
    <body>
        <script src="http://localhost:3000/socket.io/socket.io.js"></script>
        <script src="js/clientside.js"></script>
    </body>
</html>

如果有人想尝试,这是我的服务器 URL: http://201.209.104.33:8081/webrtcexamples/avq.html

【问题讨论】:

    标签: javascript node.js html firefox socket.io


    【解决方案1】:

    localhost 是一个特殊的主机名,它指向与请求它的计算机相同的计算机。因此,任何使用与您不同的计算机并尝试连接到localhost 的人都会尝试连接到自己的计算机,而不是您的计算机。由于服务器没有在他们的计算机上运行,​​他们很明显会收到“连接被拒绝”错误。

    您需要将localhost 替换为可全局访问的地址(域名或IP 地址)。这也意味着您需要让路由器将您的外部 IP 地址映射到运行该端口的服务器的计算机(否则它们将连接到您的路由器,而不是您的服务器)。

    【讨论】:

    • 不,我认为这不是问题,我在网上看到了很多代码,很多人使用这个文件 socket.io.js 来做这个,我不能使用我的动态公共 ip连接到我自己的机器,如果我这样做 201.209.104.33:3000/socket.io/socket.io.js 将无法在我自己的机器上工作
    • @user4216713,我告诉你这绝对是问题所在。 localhost 绝对是对当前本地计算机的引用,正如使用该地址的人所看到的那样。没有人可以使用localhost 连接到您的计算机。
    • 如前所述,您还需要配置路由器,以便将连接到端口 3000 的连接转发到您的计算机。
    • 对于动态 IP 地址,您需要使用动态 DNS 服务,该服务将重新映射到您当前的本地 IP 地址。
    • 为什么它可以在 www.browserstack.com 上工作?,我不明白
    【解决方案2】:

    尝试io.connect("http://201.209.104.33:3000"); 而不是io.connect("http://localhost:3000");

    编辑

    您需要在正在使用的服务器上运行套接字。所以如果你在你的电脑上运行它,你的朋友电脑将看不到它,因为当它连接到localhost时,它会尝试连接到他们电脑的localhost。不是你的。

    我之前也遇到过同样的问题。您需要在服务器之外运行它,以便每个人都可以连接到它。

    【讨论】:

    • 不,我不能这样做,这个公共 IP 201.209.104.33 是动态的,如果我尝试从我自己的 PC 连接它不会工作,你不能使用你的公共ip 在你自己的机器人中。
    • @user4216713 然后你要么需要获得实际的主机,要么需要一个动态的 dns。
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2019-11-23
    • 2019-12-23
    相关资源
    最近更新 更多