Как организовать работу с socket с gprs терминалом?
Поделитесь опытом пожалуйста. JavaScript Создал tcp сервер с помощью net из node. Есть gprs терминал Teleofis, при первом подключении отправляю запрос на авторизацию, получаю ответ, если он верный, отправляю подтверждение авторизации. Сам сокет сохраняю в список активных клиентов. К самому терминалу подключено разное оборудование, которое будет опрашиваться отдельно по запросу. Я могу сокет отправить в отдельную функцию, но все равно socket.on("data") будет отрабатывать в одном месте, и я не могу тут сделать проверку от какого оборудования пришел ответ. Как в моем случае организовать опрос оборудования? Наброски кода в codesandbox
const net = require("net");
const server = net.createServer();
const activeClients = [];
// создаю tcp сервер для подключения gprs терминалов, к которым подключено оборудование
server.listen(
{
port: 1015,
host: "localhost",
exclusive: true,
},
() => {
console.log("Сервер запущен на ", server.address());
console.log("Сервер запущен в ", Date());
},
);
server.on("connection", (socket) => {
soketConnection({ socket });
});
function soketConnection({ socket }) {
socket.write(/*отправляю запрос на первое соединение*/);
socket.on("data", (data) => {
console.log(data);
if (/*если пришел пакет от модема*/ true) {
// socket записываю в текущие клиенты
activeClients.push(socket);
socket.write(/*отправляю подтверждение соединения*/);
} else {
console.log("пакет пришел от оборудования");
/* допустим я тут вызову функцию, которая обработает данные от устройства, но данные будут от разных устройств и по пакету я не могу их проверить*/
// нужно как-то перенести чтение приходящих данных в отдельную функцию, которая будет вызываться при необходимости и при опросе конкретного оборудования
}
});
}
Ответы (1 шт):
В моем случае нужно использовать socket.once
socket.once("data", (data) => { console.log(data);}