我正在尝试在可以与远程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()
。如果您想做一些事情然后关闭套接字,则只需要从某个事件处理程序中关闭套接字即可,该事件处理程序指示您的操作已完成,并且您现在已经完成了套接字。