Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка? / 12 сообщений из 12, страница 1 из 1
02.03.2015, 08:36
    #38892022
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Есть Java applet, получающий и передающий файлы на сервер с помощью
Код: java
1.
HTTPURLConnection

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


Апплет вызывает initDownload(fileName,chunkSize) и сервер устанавливает размер блока и возвращает количество частей, на которые поделится файл при заданном размере одной части;
getFilePart(fileName,chunkNumber) - по названию все ясно. На сервере реализуется с помощью RandomAccessFile
setFilePart(fileName,chunkNumber) - ту все ясно по названию.

Потребитель АПИ по загрузке/выгрузке - мой апплет на Java, а предоставляющее АПИ приложение не мое, но так как мой апплет потребляет АПИ, я могу установить спецификации/рекомендации. При этом сервер может быть на PHP, C#, Java, веь сервер соответсвенно XAMPP, IIS, Tomcat, JBOSS ну и какие еще там есть для вышесказанных языков.

Я слашал про
Код: java
1.
setRequestHeader("Transfer-Encoding","chunked"); and setChunkedStreamingMode(chunkSize) у HTTPURLConnection

, я правильно понимаю, что просто ставлю на апплете такое и все работает. А как же АПИ-сторона? Откуда они узнают размер мои частей? Я должен в каждом реквест маппинге ставить типа Response.setChunked(true), здавать такой же размер как и в
Код: java
1.
setChunkedStreamingMode(chunkSize) 

или можно в веб сервере что-то натсроить и все?

Я что-то читал, что при chunked передаче обеим сторонам не обхательно знать размер каждого чанка, так как там просто идет размер-байты и последний чанк с нулевым размером, так ли это? В идеале, хотелось бы на стороне своего апплета прописать пару строчек, а на стороне сервера если настройка чанк-сайза не фиксированная, прописать в натсрофках сервера - просто рекомендовав клиентам там то и там то кое что прописать, прогуглив основные популярные сервера. А если настройка чанк сайза фиксированная, что противоречит вышесказнному предлодению о последнем 0-чанке, тогда надо настраивать режим чанкинга на каом входящем реквесте, на соотвествующем маппинге - не хотелось бы жестко задавать этот размер для всех маппингов. ТОгда другой вопрос - можно ли на таких яхыках как РНР и Шарп двумя строчками включить чанкинг как на Джава?

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

Короче говоря, я что-то прочитал и понял,что есть шанс не реализовывать велосипед, но в голове каша, где что настраивать, для какого языка/сервера как именно делать. Буду рад любым разъяснениям, полезным ссылкам.
...
Рейтинг: 0 / 0
02.03.2015, 17:38
    #38892687
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Что за мания такая - спрашивать на форуме то, что расписано в спецификации ?
...
Рейтинг: 0 / 0
03.03.2015, 08:31
    #38893099
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Спасибо за ссылку. таком образом, HTTP 1.1 из коробки решает мою проблему. Небольшое уточнение -

когда апплет отправляет, мне достаточно header прописать для работы в таком режиме и все? На приемнике - какой код обработки чанков?
...
Рейтинг: 0 / 0
03.03.2015, 08:47
    #38893105
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Я имею виду, стандартный код бех библиотек, твс какая-то сложная обработка или можно в несколько строк уложиться?
...
Рейтинг: 0 / 0
03.03.2015, 15:25
    #38893662
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
"Да ёрш же вашу медь ..." - берёте и пробуете .
...
Рейтинг: 0 / 0
03.03.2015, 15:36
    #38893679
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Basil A. Sidorov, то что на отправителе такой сеттер - это понятно, это я еще в первом посте писал. Приемник не так прост - я гуглил recieve chunked request java и получал только рекомендации апач коммонс или еще что-то в этом роде. А у меня апплет, не хотел нагружать его библиотеками, он же потом на клиента качается. Хотел приемник стд средствами написать. Но там еще и не каждый веб сервер поддерживает HTTP 1.1, так что решил бить файл на части, апплетом запрашивать номер части, на сервере отдавать нужный кусок файла по номеру с помощью РандомАксесФайл.
...
Рейтинг: 0 / 0
03.03.2015, 16:49
    #38893828
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
С апплетами опозданьице вышло... лет на 10. Вот жеж преподы... Чё они новости не читают.
...
Рейтинг: 0 / 0
03.03.2015, 17:45
    #38893931
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
mayton, а что предлагаете, Web Start?
...
Рейтинг: 0 / 0
03.03.2015, 17:48
    #38893936
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
Делай классическое приложение. По крайней мере не будет вопросов с безопасностью.

Отладишь. Взлетит - потом перенесёшь логику в апплет.
...
Рейтинг: 0 / 0
03.03.2015, 17:54
    #38893951
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
BaurzhanSПриемник не так прост - я гуглил recieve chunked request java и получал только рекомендации апач коммонс или еще что-то в этом роде. А у меня апплет... который приёмником быть не может.
А на будущее запомните, что form-upload это для браузеров. Если вы делаете специализированного клиента, то хоть PUT. И уж всяко - POST. С content-type=application/octet-stream.Но там еще и не каждый веб сервер поддерживает HTTP 1.1, так что решил бить файл на части, апплетом запрашивать номер части, на сервере отдавать нужный кусок файла по номеру с помощью РандомАксесФайл."ахренеть"
Во-первых - задлянафига вам вообще диапазоны, если в вашем распоряжении есть InputStream данные из которого "переливаются" в файл тривиальным циклом?
Во-вторых, с ваших слов я понял, что веб-приложение делают те, кто сделают так, как вы скажете. Можно навернуть несложную схему кодирования диапазонов для POST и это вообще никак не будет зависеть от версии протокола.
Но, опять-таки - задлянафига, если всё это может понадобиться только в том фатальном случае, когда из-за сетевых проблем оборвалась передача данных?
...
Рейтинг: 0 / 0
04.03.2015, 06:28
    #38894179
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
И апплет и сервер является и отправителями и приемниками - сперва сервер шлет файл (может большим быть), потом апплет что-то там делает с файлом и высылает обратно. Если файл большой, а загрузка пофейлилась апплет может попробовать повотрить загрузку - поэтому лучше часть, а не весь файл.
...
Рейтинг: 0 / 0
04.03.2015, 17:40
    #38894917
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка?
(медленно и печально). В http-протоколе соединение инициирует клиент. И это никак не связано с направлением преобладающего объёма передачи данных:
1. GET - от сервера к клиенту;
2. PUT - от клиента к серверу;
3. POST - вообще произвольные соотношения.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать блочную передачу на сервере и клиенте стандатными средствами протокола/языка? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]