为什么我的socket.io应用程序在Raspberry Pi上运行时立即断开?

我正在尝试在可以与远程socket.io服务器通信的树莓派上构build一个node.js应用程序。

当build立一个新的连接并closures一个现有的连接时,socket.io服务器很简单地写入控制台。

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

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

连接事件永远不会被解雇。

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 

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

为什么客户端连接事件不会触发? 我怎么能坚持这个连接,以便我最终可以发送input到服务器?

删除行:

 socket.close(); 

从你的代码。 您正在closures套接字。 请记住,所有事件处理程序都是asynchronous的。 它们是非阻塞的,将来会被调用一段时间。 同时,其余的代码运行完成,因此您的客户端有机会获取任何事件(而不是断开连接事件)之前执行您的socket.close() )。

如果你想做一些东西,然后closures套接字,那么你只需要从某个事件处理程序中closures套接字,这个事件处理程序表明你的操作已经完成,现在你已经完成了这个套接字。

当你想closures树莓派的连接时,只需要调用socket.close()。 此外,socket.io-client文档不使用.connect方法,而是调用require('socket.io-client')(serverUrl)

 var io = require('/usr/local/lib/node_modules/socket.io-client'); var serverUrl = 'http://remoteserver.com'; console.log('Connecting to ' + serverUrl); var socket = io(serverUrl); socket.on('connect', function(socket) { console.log('Connection established!'); console.log(socket.id); }); socket.on('disconnect', function() { console.log('Disconnected from server'); }); //Removed the socket.close() line