Как передать байты клиентам порциями?

SignalR теряет много сообщений, когда я передаю куски байтов от клиента через сервер к клиенту (или от клиента к серверу; или от сервера к клиенту).

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

Как я могу передавать большие файлы (фрагментами или нет) от клиента к клиенту без потери сообщений?


person Manuel    schedule 10.10.2012    source источник


Ответы (3)


Как отмечает @dfowler, эта технология не подходит для работы. Я бы рекомендовал отправить сообщение о том, что есть файл для загрузки, содержащий ссылку, а затем вы можете загрузить этот файл, используя стандартные запросы GET либо к статическим файлам, либо к какой-либо веб-службе, написанной с помощью ASP.NET WebAPI.

person Drew Marsh    schedule 10.10.2012

SignalR предназначен не для передачи файлов, а для отправки сообщений.

person davidfowl    schedule 10.10.2012

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

На самом деле он отлично работает при отправке массива байтов, по крайней мере, для меня, однако я столкнулся с аналогичными проблемами при передаче фрагментов.

Возможно, вы можете выполнить некоторые тесты, чтобы проверить, совпадает ли порядок, в котором вы отправляете фрагменты, с порядком их получения.

ОБНОВЛЕНИЕ

Я сам провел тест, и в моем случае проблема действительно была в порядке. Изменен метод концентратора, получающий фрагменты, чтобы принять параметр порядка, который я затем использую для восстановления массива байтов в конце, и он работает нормально. Сказав это, я, однако, теперь понимаю, что это не сработает при передаче больших файлов.

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

person Simo Ferrari    schedule 30.04.2013
comment
У вас есть пример кода для этого? Как ты получаешь куски? Спасибо - person user1331889; 22.11.2017