节点 js - Socket.io-client 未连接到 socket.io 服务器

Posted

技术标签:

【中文标题】节点 js - Socket.io-client 未连接到 socket.io 服务器【英文标题】:Node js - Socket.io-client is not connecting to socket.io server 【发布时间】:2015-05-20 10:37:17 【问题描述】:

我正在尝试使用以下代码连接到 socket.io-client:

服务器:

// Load requirements
var http = require('http'),
    io = require('socket.io');

// Create server & socket
var server = http.createServer(function(req, res)

    // Send html headers and message
    res.writeHead(404, 'Content-Type': 'text/html');
    res.end('<h1>Aw, snap! 404</h1>');
);
server.listen(8080);
io = io.listen(server);

// Add a connect listener
io.sockets.on('connection', function(socket) 

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() 
        console.log('Client disconnected.');
    );
);

客户:

console.log('1');

// Connect to server
var io = require('socket.io-client')
var socket = io.connect('localhost:8080', reconnect: true);

console.log('2');

// Add a connect listener
socket.on('connect', function(socket) 
    console.log('Connected!');
);

console.log('3');

我没有得到连接的控制台日志或客户端连接的控制台日志,我不知道为什么!代码示例取自另一个发布的问题:Link,我没有看到任何问题的解决方案......

【问题讨论】:

那么,问题是什么? 您是否检查了防火墙、防病毒软件和其他阻止连接的应用程序?您是否在命令行中运行了服务器端代码?您还做了哪些其他调查? 【参考方案1】:

假设您在服务器上使用大于 1.0 的 socket.io 版本,请更改以下内容:

// Add a connect listener
io.sockets.on('connection', function(socket) 

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() 
        console.log('Client disconnected.');
    );
);

到这里:

// Add a connect listener
io.on('connection', function(socket) 

    console.log('Client connected.');

    // Disconnect listener
    socket.on('disconnect', function() 
        console.log('Client disconnected.');
    );
);

请参阅 socket.io 文档reference here。


您不想只在已连接的套接字上监听此事件。您想在任何套接字上侦听此事件,即使是新创建的。


另外,在互联网上随机读取 socket.io 代码时要非常小心。有些事情从 v0.9 到 v1.0 发生了显着变化(我不知道这是否是其中之一)。您通常应该首先从 socket.io 文档站点开始,因为它始终代表最新版本。然后,如果查看其他 Internet 参考资料,请确保您只使用 2014 年年中之后的文章。如果您不知道一篇文章的年代,最好不要在没有最近一篇文章的证实的情况下依赖它。

【讨论】:

【参考方案2】:

您还需要添加带有路径的协议。

改变

var socket = io.connect('localhost:8080', reconnect: true);

var socket = io.connect('http://localhost:8080', reconnect: true);

【讨论】:

我在我的代码上尝试了所有这些更改,但是当我在终端中运行脚本时,控制台没有记录在我的树莓派上建立了连接。树莓派是客户端。【参考方案3】:

您可以使用本地主机。它也适用于我。您必须使用适合您的 IP 地址和端口

【讨论】:

当我从 localhost 更改为 ipv4 地址时,它对我有用【参考方案4】:

使用相同版本的socket io 客户端和服务器。它会完美运行。

【讨论】:

这个!经过 8 小时的痛苦!就是这个!谢谢你

以上是关于节点 js - Socket.io-client 未连接到 socket.io 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io-client 未连接到 socket.io 服务器反应和节点(快递)

在 create-react-app 中使用 Socket.io-client 的 WebSockets 代理

Socket.IO 客户端如何连接?

node.js 上的 Socket.io-client 只工作一次

Socket.IO-client.java 反复断开重连

即时通讯:服务端SpringBoot+Netty-Socket.io,客户端Socket.io.js+Java版Socket.io-client