Javascript 为什么我的socket.io应用程序在Raspberry pi上运行时会立即断开连接?

Javascript 为什么我的socket.io应用程序在Raspberry pi上运行时会立即断开连接?,javascript,node.js,sockets,raspberry-pi,Javascript,Node.js,Sockets,Raspberry Pi,我正在尝试在Raspberry Pi上构建node.js应用程序,该应用程序可以与远程socket.io服务器通信 当建立新连接和关闭现有连接时,socket.io服务器非常简单地写入控制台 在浏览器中运行时,socket.io客户端按预期工作 但是,当我从Raspberry Pi运行客户机代码时,它会连接并立即终止。这不允许我执行任何功能,如发射或接收 on connect事件从未触发 var io = require('/usr/local/lib/node_modules/socket.i

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

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

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

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

on connect事件从未触发

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()


如果要执行某些操作,然后关闭套接字,则只需从某个事件处理程序关闭套接字,该事件处理程序指示操作已完成,并且您现在已完成套接字操作。

当您要从raspberry pi关闭连接时,只需调用socket.close()。另外,socket.io-client文档不使用.connect方法,而是调用
require('socket.io-client')(serverUrl)


因为您正在立即关闭连接。您应该添加一些错误处理:服务器是否实施某种身份验证(基于会话cookie或其他内容)?确保您不是在代理或攻击性应用程序防火墙后建立连接,因为这可能会导致您描述的问题。初始连接将成功,但套接字通信的其余部分将永远无法恢复,您的客户端最终将超时并关闭。很抱歉造成混淆。如果没有socket.close()行,则会出现相同的结果。您的示例会说“连接到”,然后挂起。它永远不会到达“连接”事件内部。我添加了socket.close()行,以查看是否至少可以在服务器端触发断开连接事件(它没有)。所以这里肯定发生了什么事。更新了答案。抱歉搞混了。如果没有socket.close()行,则会出现相同的结果。连接只是挂起,不调用任何事件。我尝试过其他事件名称,但这些名称也没有被调用。@aaronfarr-您需要进行一些调试。您显示的客户端代码没有其他明显的错误。我建议您为事件
connect\u error
connect\u timeout
error
安装事件处理程序,并查看是否触发了这些事件。另外,
socket.on('connect',function(socket){
应该是
socket.on('connect',function(){
不带
socket
参数。对于客户端代码,您已经有了
socket
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