У меня есть следующая ситуация и я просто хочу проверить, правильно ли я делаю это. У меня есть несколько устройств у моих клиентов (RS232). Теперь у меня есть подключенный к нему RS232-WIFI-ключ, поэтому данные из устройства отправляются на мой сервер (он выводит данные, например: {12,1,etc
). На моем сервере у меня есть скрипт NodeJS работает, что открывает порт и считывает все данные поступают.nodejs tcp listener script
var net = require('net');
var host = '1.1.1.1';
var servers = [];
var ports = [20000, 20001, 20002, 20003, 20004];
// Create servers
ports.forEach(function (port) {
var s = net.createServer(function (sock) {
// We have a connection - a socket object is assigned to the connection automatically
console.log('CONNECTED (' + sock.localPort + '): ' + sock.remoteAddress + ':' + sock.remotePort);
// Add a 'data' event handler to this instance of socket
sock.on('data', function (data) {
// post data to a server so it can be saved and stuff
postData(data.toString(), sock);
// close connection
sock.end();
});
sock.on('error', function (error) {
console.log('******* ERROR ' + error + ' *******');
// close connection
sock.end();
});
});
s.listen(port, host, function() {
console.log('Server listening on ' + host + ':' + s.address().port);
});
servers.push(s);
});
Ладно, так что это работает довольно хорошо. Но мне интересно, иногда не все данные публикуются сразу, иногда я получаю {12,
, а через секунду я получаю все остальное (или даже больше раз требуется). Что я могу сделать, чтобы оптимизировать этот скрипт дальше? Нужно ли мне звонить sock.end();
после получения данных? Это влияет на производительность сети для меня или моих клиентов? Если вам, ребята, нужна дополнительная информация, дайте мне знать.
Ok спасибо! Устройство настроено на режим клиентского режима tcp, и я не знаю, отправит ли он конечный сигнал (как я могу проверить?) Я знаю, что отправляемое отправление данных начинается с «{» и заканчивается «CS» " В случае, если устройство не отправляет сигнал окончания, я не могу закончить его сам после получения данных? Просто продолжайте слушать и извлекать данные, если он действительно отправлен на мой сервер и очистить буфер? Это лучший способ избежать накладных расходов tcp? – MVUG
вы можете записывать события «end», чтобы узнать, что соединение закрыто для каждого сообщения или нет. – damphat
Да, я понял. Но я не должен явно закрывать соединение в своем событии с данными? – MVUG