У меня есть сервер, который отправляет данные телеметрии различного размера получателям или, как я их назову, клиентам, через NetworkStream
.Я стремлюсь к максимальной скорости, поэтому я хочу минимальных задержек.Частота не контролируется, поэтому я хотел бы использовать бесконечный цикл в моих клиентах, который использует NetworkStream.Read
для чтения данных, их обработки, а затем повторения.
Моя проблема в том, что иногда, если два пакета отправляются очень быстро, а у клиента медленное интернет-соединение, два пакета будут приниматься в виде непрерывного потока, что приведет к необработанным данным.Полу-решение, которое я нашел (в основном для подтверждения того, что это действительно ошибка), должно иметь небольшую задержку после / перед каждой передачей, используя System.Threading.Thread.Sleep(100)
, но не только я нахожу Sleep
неудачное решение, оно несовместимо, так какэто также замедляет работу клиентов с хорошим соединением, и проблема может сохраняться при еще худшем соединении.
Я хотел бы, чтобы сервер отправлял разрыв между каждой передачей, обеспечивая разделение независимо от того,скорости интернета, так как NetworkStream.Read
должен завершиться после окончания текущего непрерывного потока.Я не очень хорошо понимаю работу NetworkStream
и понятия не имею, как выглядят несколько байтов пустого потока или как его можно реализовать.Есть идеи?