#node.js #sockets #events
#node.js #розетки #Мероприятия #сокеты
Вопрос:
Итак, я создаю расширение vscode в typescript и node, и у меня есть приложение python, которое отправляет данные с помощью сокета на localhost 8080, и я улавливаю это следующим образом :
export default async function getSock(port, adress, dataOld): Promise<void> {
let server = net.createServer(function (socket) {
socket.setEncoding('binary');
socket.on('data', async function (data) {
console.log('client send:' data);
let m = port
new **UI**(data);
server.close()
});
socket.on('error', function (exception) {
console.log('socket error:' exception);
socket.end();
});
socket.on('close', function (data) {
console.log('client close:' data);
});
socket.on('end', function() {
console.log('disconnected from server');
server.close()
});
})
server.listen({port: port, adress: adress});
}
Теперь мне нужен какой-то механизм, который при прослушивании в течение 5 секунд и отсутствии данных, переданных из сокета, я прекращаю прослушивание и вызываю «новый пользовательский интерфейс (dataOld)»
Комментарии:
1. Неясно, что вы имеете в виду, когда говорите «но когда у меня нет данных в сокете»? Как это происходит? Как бы вы узнали, когда прекратить ждать поступления фактических данных и вместо этого использовать
dataOld
?2. Также опасно предполагать, что один пакет входящего
data
события представляет собой полный набор данных. TCP в nodejs — это поток, и данные могут поступать в любых частях. Вместо этого вы должны знать свой собственный протокол и убедиться, что у вас есть полная часть данных, которую вы можете обработать.3. первый комментарий — это то, на что я пытаюсь ответить, какой шаблон было бы целесообразно знать, если поток имеет готовые данные, и если не выдавать событие, которое обслуживает старые данные, я предполагаю, что это может быть таймер, если нет данных на слушателе в течение 5 секунд, активировать новый пользовательский интерфейс (dataOld)
4. итак, возможно ли прекратить прослушивание сервера после 10 секунд прослушивания и вызвать класс с помощью dataOld?