LINUX.ORG.RU

Отправка большого файла через WebSocket

 , , ,


1

6

Решил спросить у экспертов, есть ли возможность параллельной отправки одного файла(разбитого на чанки) через WebSocket.

Есть предположение, что на каждый чанк нужно открывать сокет в отдельном потоке, это правильная мысль?

И еще вопрос, как потом собирать такой файл?

PS Я нуб в вопросах WebSocket. Проект смешанный - Python и C++/Qt

А смысл в параллельной отправке? Чего пытаетесь добиться? При одном канале передачи выигрыша не будет.

Открывать сокет в отдельном потоке не нужно.

Индексировать чанк, на принимающей стороне собирать файл с помощью прикрепленных индексов.

anonymous
()
Ответ на: комментарий от anonymous

в смысле, чтобы поделить условный файл(10МБ) на 10 кусков, и отправлять их отдельно друг от друга. Т.е. оправлять его не через 1 сокет, а через 10 условных сокетов за одну единицу времени.

theLastOfCats
() автор топика
Ответ на: комментарий от I-Love-Microsoft

Помню давным-давно когда ещё был виндузятником и сидел через 3G модем качал большие файлы с помощью Free Download Manager, который качал в N потоков (N настраивается). То есть открывал несколько соединений и с помощью HTTP Range качал куски файла параллельно. Казалось бы - канал один, удалённый сервер один, но прирост в скорости мог достигать нескольких раз.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

Сейчас через ADSL/LTE/Ethernet прирост либо будет 1-3%, либо в минус (на ADSL, например). У меня через ADSL в несколько потоков качает медленней, чем в 1.

menangen ★★★★★
()
Ответ на: комментарий от KivApple

Просто сервер балансил трафик равномерно в каждое из сотен TCP подключений к нему. На аналогичных файлопомойках и щас сработает.

ei-grad ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Клиент забирает, примерно, 100МБ данных с сервера, есть желание передавать эти данные не одним куском, последовательно через один сокет, а передавать разбитые данные, через несколько сокетов.

Т.е. условно, если 100МБ последовательно передаются 40-60 секунд, имеет ли смысл передавать через 10 сокетов чанки по 10МБ и собирать их впоследствии?

theLastOfCats
() автор топика
Ответ на: комментарий от theLastOfCats

Если у тебя есть ограничение не скорость одного коннекта, то имеет, иначе нет.

+ с разбивкой на куски сложнее делать докачку.

anonymous
()
Ответ на: комментарий от theLastOfCats

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

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от anonymous

Бред какой-то. Если мне нужно пустить какой-то tcp-шный протокол поверх HTTP, я делаю upgrade и переиспользую tcp-соединение. А пускать HTTP через ws вообще бессмысленно

annulen ★★★★★
()
Ответ на: комментарий от annulen

Range же только работает при передаче от сервера к клиенту? А топикстартеру навереняка надо в другую сторону? А так, да. Несколько запросов с range и писать в файл с разных смещений.

vromanov ★★★
()
Ответ на: комментарий от I-Love-Microsoft

Часто ускоряет. Позволяет более плотно загрузить канал. Также иногда на серверах есть огранчиение цпс на коннект.

vromanov ★★★
()
Ответ на: комментарий от vromanov

А топикстартеру навереняка надо в другую сторону?

О, для этого есть замечательный протокол PTTH

http://reversehttp.net/

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.