Доброе утро, вопрос следующий. Сервер написан на nodejs, с использованием библиотеки Net. GPS трекер присылает по одному на сервер(1 информационный пакет = 42 байт), если сервер был выключен, то на трекере копятся пакеты, которые затем присылаются пачкой из 10 информационных пакетов то есть 10*42=420 байт пачка. Затем пакет разбирается и сохраняется в MySQL.
Когда присылает по 1 пакету, работает стабильно. А когда по 10 пакетов, разрывает соединение через какое-то время. В чем может быть проблема?
UPD: заметил закономерность в ошибке, всегда выбивает bytesRead: 6966
Код приема данных:
socket.on('data', function(data) {
var data = new Buffer(data, "hex");
data = data.toString("hex");
var gpsData = ServerCore.decodePackage(data);
ServerCore.emit('track', gpsData);
ServerCore.emit('encodeTrack', data);
});
Код сохранения в базу:
for(var i = 0; i < packages.length; i++) {
var sql = {
id: data["packages"][packages[i]].id,
software: data["packages"][packages[i]].software,
status: data["packages"][packages[i]].status,
latitude: data["packages"][packages[i]].latitude,
longitude: data["packages"][packages[i]].longitude,
course: data["packages"][packages[i]].course,
speed: data["packages"][packages[i]].speed,
acc: data["packages"][packages[i]].acc,
height: data["packages"][packages[i]].height,
hdop: data["packages"][packages[i]].hdop,
glonass: data["packages"][packages[i]].glonass,
gps: data["packages"][packages[i]].gps,
time: data["packages"][packages[i]].timestamp,
voltage: data["packages"][packages[i]].voltage
}
pool.getConnection(function(err, connection) {
connection.query("INSERT INTO trackerData SET ?", sql ,function (err, result) {
if(err) console.log(err);
console.log(result);
connection.release();
});
});
}
Ошибка сокета:
{ [Error: Socket error]
reason: 'Socket error',
socket:
{ _connecting: false,
_handle: null,
_readableState:
{ highWaterMark: 16384,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
flowing: false,
ended: false,
endEmitted: false,
reading: true,
calledRead: true,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
objectMode: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: false,
domain: null,
_events:
{ end: [Object],
finish: [Function: onSocketFinish],
_socketEnd: [Function: onSocketEnd],
error: [Function],
data: [Function],
readable: [Function] },
_maxListeners: 10,
_writableState:
{ highWaterMark: 16384,
objectMode: false,
needDrain: false,
ending: false,
ended: false,
finished: false,
decodeStrings: false,
defaultEncoding: 'utf8',
length: 0,
writing: false,
sync: true,
bufferProcessing: false,
onwrite: [Function],
writecb: null,
writelen: 0,
buffer: [],
errorEmitted: true },
writable: false,
allowHalfOpen: false,
onend: null,
destroyed: true,
bytesRead: 6966,
_bytesDispatched: 0,
_pendingData: null,
_pendingEncoding: '',
server:
{ domain: null,
_events: [Object],
_maxListeners: 10,
_connections: 0,
connections: [Getter/Setter],
_handle: [Object],
_usingSlaves: false,
_slaves: [],
allowHalfOpen: false,
_connectionKey: '4:0.0.0.0:12300',
maxConnections: 0 },
_peername: { address: '85.26.233.161', family: 'IPv4', port: 17032 },
pipe: [Function],
addListener: [Function],
on: [Function],
pause: [Function],
resume: [Function],
read: [Function],
_consuming: true,
_idleNext: null,
_idlePrev: null,
_idleTimeout: -1 },
settings:
{ ip: '0.0.0.0',
port: 12300,
connections: 0,
maxConnections: 1000 } }