我正在尝试在可以与远程socket.io服务器通信的Raspberry Pi上构建node.js应用程序。

建立新连接和关闭现有连接时,socket.io服务器非常简单地写入控制台。

在浏览器中运行时,socket.io客户端可以按预期工作。

但是,当我从Raspberry Pi运行客户端代码时,它会连接并立即终止。这不允许我执行任何功能,例如发射或接收。

连接事件永远不会触发。

var io = require('/usr/local/lib/node_modules/socket.io-client');
var serverUrl = 'http://remoteserver.com';

console.log('Connecting to ' + serverUrl);
var socket = io.connect(serverUrl);

socket.on('connect', function(socket) {
    console.log('Connection established!');
    console.log(socket.id);

    socket.on('disconnect', function() {
            console.log('Disconnected from server');
    });

});

上面的代码将输出:
Connecting to: http://remoteserver.com

在服务器端,输出将显示一个新的连接,并最终关闭超时。

为什么连接事件上的客户端不触发?如何保持该连接,以便最终可以将输入发送到服务器?

最佳答案

删除行:

socket.close();

从您的代码。您正在立即关闭插槽。请记住,所有事件处理程序都是异步的。它们是非阻塞的,将来会被调用。同时,其余代码将运行完毕,因此,在客户端有机会获得任何事件(而不是断开连接事件)之前,将执行socket.close()

如果您想做一些事情然后关闭套接字,则只需要从某个事件处理程序中关闭套接字即可,该事件处理程序指示您的操作已完成,并且您现在已经完成了套接字。

10-07 19:16
查看更多