обработка клиентских данных sokect в шаблонах узлов

#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?