Почему режется скорость передачи данных с сервера во время стрима?
Имеется ASP. NET приложение работающее на VPS сервере. (Ширина канала 200 мб\c). Оно работает следующим образом передаются данные с клиента на сервер и сразу же в браузер (около 1.5 мб/c). Когда я запускаю на IIS Express то все работает как и ожидается, но при отправке на удаленный сервер режется скорость отправки, при этом скорость получения остается на уровне (1.5мб\с).
Ответ напрашивается один - проблема в VPS сервере, но как только я перестаю отправлять данные, то скорость отправки поднимается до желанных 1.5 мб\с. Бьюсь с проблемой уже не первый месяц. Менял хостинг провайдера но не помогает. В чем дело ??
Пробовал разные конфигурации VPS. Вплоть до 5 ядер, 10 гб оперативки и 1гб/c ширина канала. Даже на самой мощной конфигурации проблема одна и таже.
Для передачи данных используется SignalR (c Принудительным использованием WebSocket). Сайт размещается на IIS.
sim3x, Конкретно, по тому почему не работает ничего. Но я писал в тех поддержку до того как приобретать VPS, примерно также описал что я хочу сделать, на что мне посоветовали тариф. Я его попробовал, но как уже говорилось не работает. После этого решил, что пока что не стоит сильно разбрасываться деньгами, и поэтому взял тестовый период для оценки разных конфигураций. Но как уже писал ранее без результатно.
rionnagel 1. Берется строка (30 000 символов). Делится на несколько фрагментов (1400 символов в каждом), т.к SignalR запрещает передавать большие данные, да и вообще чтобы избежать фрагментации. И после этого каждый фрагмент отправляется с помощью функции SendFramePart (первая картинка) на сервер. myFunc == "ReceiveFramePart".
2. Вторая картинка это Hub. Здесь мы получаем каждый строку (1400 символов) и отправляем на подключенные клиенты, вызывая метод "Display". Этот метод прослушивается в реализации JS.
3. И наконец 3 картинка. Здесь мы принимаем каждую строку по 1400 символов. И востанавливаем исходную строку 30000 символов. Как только приходит последний фрагмент полной строки, мы отправляем эту строку в функцию RenderFrame. (На самом деле передаются картинки, но это уже другой вопрос).
Михаил, спасибо за пояснение. Я скорее имел ввиду с точки зрения сетевых подключений и действий. Приходит клиент, нажимает на кнопку - посылается запрос и т.д.. Как оно есть, а как должно быть и где. Чтобы более наглядно увидеть в чем проблема и в чем может.
Потому что сходу вариантов может быть масса. От настроек веб сервера, до концептуальных проблем. Может вам надо не 1 мощный iis, а 10 обычных) просто к примеру.
rionnagel 1) Есть видеокамера. Я могу взять у нее стрим. Стрим выглядит как последовательность JPEG изображений. Так вот с помощью приложения отправителя я посылаю каждую картинку на сервер. - с помощь SignalR по WebSocket.
2) Далее, как только кто-то заходит в браузере на сайт. то на главной странице сразу появляется "Плейер". - просто тег image. На котором один за другим отрисовываются изображения. (с помощью метода Display) Получается стрим. Пользователи его смотрят.
На данный момент ожидается, что число посетителей будет около 50 - 100 человек. (В том числе с мобильных)
rionnagel Решение с GlobalHost = null, не подходит так как я использую SignalR Core, а там запрашивается .NET версия. Поэтому я не могу подключить этот пакет.
Но Core можно устанавливать MaxBufferSize. Я это делал. Но не помогло.
Кстати говоря, каждый раз когда я пытаюсь опубликовать приложение на IIS (удаленно). То запрашивается установка дополнительного пакета ASP.NET Core/.NET Core: Runtime & Hosting Bundle. Может здесь проблема?
После некоторых поисков я пришел к заключению, что что нужно использовать что-то вместо веб-сокетов. Потому что они под собой используют протокол TCP, из-за которого видимо и случается задержка на удаленном сервере. Поскольку при отправке данных на локальный IIS потеря пакетов нулевая, то ясно почему локально у меня все работает.