У событий Node net.Socket.on ("data") гарантированный порядок? - PullRequest
1 голос
/ 04 апреля 2019

Я создаю сокет в Node.js с net.connect(host, port), записываю в него некоторые данные и затем прослушиваю результаты обратно в сокет.

Протокол TCP имеет встроенную информацию о заказе; пакеты могут отправляться или поступать не по порядку, а затем переупорядочиваться клиентом с использованием информации, встроенной в метаданные пакета.

Node.js запускает серию событий .on("data"), чтобы сообщить вам, что данные были получены в сокете. Эти события генерируются в некотором порядке - существует только один поток выполнения, поэтому они не могут обрабатываться одновременно.

Гарантируется ли порядок событий передачи данных порядка пакетов TCP? Возможно ли событие .on("data") сработать не по порядку для данных, полученных в сокете?

1 Ответ

1 голос
/ 04 апреля 2019

Данные TCP доставляются ОС в сокет TCP по порядку или не поступают вовсе.AFAIK NodeJS в основном делает epoll() (через libuv) на открытых сокетах и ​​читает данные, когда они поступают.Затем он ставит в очередь событие data, которое доставляется нашему обработчику событий по порядку.

Так что я не думаю, что возможно формирование data событий для сокета, который будет обработан не по порядку,Если бы это было возможно, было бы очень трудно надежно обрабатывать TCP-трафик в NodeJS.

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