Задержка при отправке данных через NetworkStream BeginWrite?
Здравствуйте!
Столкнулся с такой проблемой: У меня приложение, которое принимает данные и передает их другим пользователям. И передает их другим пользователям. Данных передается много и постоянно. Данные до пользователей доходят но с невероятной задержкой(10 минут). Хотя в логах написано и по программе видно, что данные отправлены.
Сервер подключается к пользователю и все шлет с одного соединения. Данные передаю через метод BeginWrite и соответственно в callback отправляю данные пользователю, заканчивая запись в поток.
Как я понял метод EndWrite блокируется до оправки данных пользователю. Может ли быть что данные просто жду постоянно EndWrite, а так как их много они не успевают отправиться и ожидают в очереди. И если да то как можно решить данную проблему?
Может ли быть что данные просто жду постоянно EndWrite, а так как их много они не успевают отправиться и ожидают в очереди.
Если у вас используется фреймворк 4.5 версии и выше, то попробуйте вместо олдскульных BeginWrite, EndWrite использовать WriteAsync. Так по описанию трудно понять, в чем у вас может быть проблема.
Попробую объяснить
Есть моя разработка(Сервер) к ней подключаются устройства. Количество соединений может быть 20-30.
И сам сервер создает подключение к другой машине, на которую он отсылает обрабатываемую информацию.
Данные с устройств приходят раз в 5-10 секунд. Ещё 2-3 секунды они обрабатываются и отправляются другому северу. Данные не большие максимум 150-200 байт. Но через какой-то промежуток времени данные на другой сервер начинают уходить с задержкой(если перезапустить сервер информация вновь нормально начинает уходить). Поставил логи после EndWrite(в них пишу время поступления информацию+время её обработки, и записываю когда была сделана запись в лог - является временем когда пакет, по моему мнению, уже отправлен и дошел другому серверу). Получается время на обработку и отправку 3-5 секунд. Но до конечного сервера: либо не дошли(хотя exception не вылетел), либо дошли с задержкой.
Phreeman: NetworkStream.WriteTimeout по дефолту бесконечность. Попробуйте устновить к-либо значение (оно в миллисекундах). Есть еще предположение, что между входом (получение данных с устройств) и выходом (отправление данных клиентам) где-то образуется очередь, которая не успевает обрабатываться. Попробуйте поставить логи в нескольких точках, и посмотрите, где образуется очередь.