我正在开发 NodeJS 客户端 - 服务器项目,其中客户端是 BeagleBoneBlack 。我使用SocketIO
向服务器发送BBB读数。
当我从服务器上拔下LAN电缆时,客户端和服务器都知道连接丢失了。当我将其插回时,会出现问题;在重新连接时,客户端再次连接但服务器连接事件处理程序触发两次。一段时间后,服务器触发断开连接,但客户端仍然连接。出于某种原因,该程序生成两个套接字,当它知道其中一个是假的时,它会断开连接。
我发现这个问题的解决方案是将一个事件处理程序寄存器放在连接回调之外,所以我为客户端做了这个。但我不知道是否可以在服务器端进行,我不知道如何使这项工作。
客户方:
var socket = require('socket.io-client')('http://192.168.1.147:6400');
var isConnected = false;
var messageQueue = [];
socket.on('connect', function () {
isConnected = true;
console.log("socket connected");
socket.emit('some-event', data);
});
socket.on('connect_error', function() {
isConnected = false;
console.log('Failed to connect to server');
});
socket.on('disconnect', function() {
isConnected = false;
console.log("socket disconnected");
});
服务器端:
io.on('connection', function(socket){
var address = socket.handshake.address;
var idx = address.lastIndexOf(':');
if (~idx && ~address.indexOf('.'))
address = address.slice(idx + 1);
console.log(address + " is connected");
socket.on('disconnect', function () {
console.log(address + " is disconnected");
});
socket.on('some-event', function (data) {
//some code
});
});