Возможно ли столкнуться с расой при обработке данных на TCP-сервере Node.js? - PullRequest
0 голосов
/ 02 февраля 2019

Я настраиваю TCP-сервер, используя Node.js, и в случае события «data» я передаю данные экземпляру объекта синтаксического анализатора, который обрабатывает данные, а затем отправляет их в облако.Мой вопрос заключается в том, что в случае, когда первое событие данных не завершило обработку, но второе событие «данные» того же TCP-соединения было запущено, что произойдет с данными, будет ли обработан второй пакет данных«одновременно» как первый?

Этот TCP-сервер предназначен для обработки нескольких соединений, и каждое соединение непрерывно обрабатывает довольно большой объем данных.И важно, чтобы данные обрабатывались последовательно.

var net = require('net');
const rfDataParser = require('./MyDataParser');
const HOST = 'localhost'
const PORT = 8000;

var server = net.createServer(onClientConnected);

function onClientConnected(sock) {
    const parser = new rfDataParser();
    sock.on('data', function(data) {
        parser.parse(data);
    }
}

server.listen(PORT, HOST, function() {  
    console.log('server listening on %j', server.address());
});

Я ожидаю, что данные второго события «data» не будут обработаны, пока данные первого события «data» не закончили обработку.

1 Ответ

0 голосов
/ 02 февраля 2019

Вы задаете два разных вопроса:

Будет ли второй пакет данных обрабатываться «одновременно» как первый?

Нет, событие -цикл поставит в очередь обработку второго события, если первое все еще обрабатывается.Node.js - однопоточная платформа;Нет способа, чтобы две строки в файле JS выполнялись одновременно.

Возможно ли встретить состояние гонки?

Да, пока ваш код выполняется в одномпоток, сам узел опирается на несколько потоков для обработки ввода / вывода.Если ваша обработка включает в себя асинхронный ввод-вывод, и вы не ждете обратного вызова перед вызовом выполненного задания, возможно условие гонки.

Подробнее о цикле событий можно прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...