Нужно расставить приоритеты асинхронного чтения сокетов в C # - PullRequest
6 голосов
/ 13 мая 2011

Мое приложение предварительно извлекает большое количество видеокадров, используя асинхронные запросы HttpWebRequest.Таким образом, если имеется 100 кадров, средство предварительной выборки будет запрашивать все 100 кадров асинхронно, все сразу, и обрабатывать при получении обратно.т.е. он совершает 100 асинхронных вызовов одновременно.Это может насытить сетевую карту, но это нормально.Я хочу максимизировать пропускную способность сети.

Однако, пока происходит эта предварительная выборка, пользователь может захотеть просмотреть один из кадров.Итак, предположим, что они хотят просмотреть кадр 56. Проблема в том, что кадры 1-100 уже были запрошены и находятся в канале, поэтому для запроса кадра 56 может потребоваться много времени для получения ответа.

Было бы неплохо, если бы был какой-то способ перераспределения приоритетов асинхронных запросов после их выполнения.И подтолкнуть пользовательский запрос в начало очереди.

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

Любые идеио том, как спроектировать это должным образом, будет очень цениться.

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Это не вопрос программирования, а вопрос протокола. Если вы используете жадный протокол, который насыщает провод, то вы фактически отключили даже свои собственные опции, используя традиционные протоколы.

Если вы зарезервировали часть полосы пропускания для второго канала, вы можете использовать этот второй канал для отдельных кадров вместо пакетных кадров. Чтобы расставить приоритеты кадров во втором канале при наличии насыщенного сетевого адаптера, вам потребуется качество обслуживания или какой-либо другой канальный уровень для определения приоритетов трафика.

Но мы забегаем вперед. Если вам нужно функциональное приложение с хорошим поведением, вам нужно сесть и определить реальный протокол с советами экспертов по протоколам: сетевые адаптеры, коммутаторы, протоколы, размеры пакетов, повторные попытки и т. Д. После того, как вы все разобрались, у вас будет проблема программирования.

0 голосов
/ 13 мая 2011

Ах, я бы использовал приоритетную очередь или кучу для обработки "пакетов" кадров.Поскольку вам не нужен тайм-аут, а также скорость, создайте пакеты кадров (размером в два) и свяжите их с приоритетом (возможно, 0 для не запрошенного, 1 для запрошенного пользователя?).Таким образом, пакеты с наивысшим приоритетом (запрошенные пользователем) всегда будут находиться в начале очереди или в верхней части кучи.

...