C # /. net: передача большого количества небольших данных через TCP-соединение - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть приложение, которое должно передавать много маленьких сообщений (1-3 байта) через соединение TCP (WLAN). Я знаю, что отправка 100 КБ за раз намного быстрее, чем отправка их очень маленькими кусочками (почти в байтах). Тем не менее, информация, которую мне нужно передать, имеет размер всего 1-3 байта. Сбор данных перед отправкой увеличит пропускную способность, но важно, чтобы небольшие фрагменты данных передавались как можно раньше / быстрее. Поэтому сбор данных перед отправкой является проблемой. Теперь я спрашиваю, что было бы лучше, чтобы не отправлять каждое сообщение индивидуально, с одной стороны, и, с другой стороны, не задерживать их передачу дольше, чем это необходимо. Сейчас я думаю о создании небольшого буфера. Когда добавляется первое сообщение, я запускаю таймер с таймаутом 1 мс. После этой миллисекунды данные будут переданы. Независимо от количества байтов в очереди. Но я не знаю, является ли это хорошим решением.

Нет ли способа, которым классы TCPClient / Server. NET сами имеют решение для такой проблемы. Я имею в виду, они должны знать, когда закончится текущая передача. Тем временем они могут накапливать все запросы на отправку и отправлять их как за одну транзакцию.

1 Ответ

1 голос
/ 29 февраля 2020

Стек TCP по умолчанию уже буферизует данные внутри, чтобы уменьшить накладные расходы при отправке. См. Алгоритм Nagle для деталей. Просто убедитесь, что у вас включен этот алгоритм, т.е. установите Nodelay в false.

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