powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сетевой обмен. Парсинг информации на лету
10 сообщений из 10, страница 1 из 1
Сетевой обмен. Парсинг информации на лету
    #40119378
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Парни, подскажите, пожалуйста такой момент.

Для примера возьмём простой сокет и обычный HTTP протокол.
Соединяемся с сервером, отправляем данные и получаем ответ от сервера.

Вот какой вопрос... А как происходит парсинг данных в таком случае когда размер заголовков неизвестен?
Ведь для разделения заголовков и данных нужно отловить два перевода строки #13#13.

И вот предположим маленькая скорость, ну пусть 1 байт в секунду, и что - каждую секунду парсить буфер на #13#13 чтобы узнать где конец заголовков? Да как-то не оптимально и дурно...

А если речь о XML? Клиент скачивает, например, какие-то данные или параметры в XML формате, как отловить начало и конец тега <data></data> для парсинга не зная размер данных ?
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119381
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Не путай транспортный и информационный протоколы.
Если в сокете есть данные, то они есть целиком.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119385
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский Борис,
Что за чушь? Вы видимо не поняли вопроса да и не хотите.
В сокете те данные которые пришли, но вам же не понять что данные кусками приходят, а не ЦЕЛИКОМ.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119391
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все верно кроме того что надо с начала парсить каждый раз. Парси только свеже полученное.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119400
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman

А если речь о XML? Клиент скачивает, например, какие-то данные или параметры в XML формате, как отловить начало и конец тега <data></data> для парсинга не зная размер данных ?

Xml - парсеру не нужно никаких заголовков. Он будет ждать завершающегося тега.

Но в твоём вопросе столько всего намешано. Если ты на сыром сокетном протоколе хочешь стримить
множество документов - то надо будет ввести еще один слой абстракций. Что-то вроде месседжа. И разделить
стрим месседжей от внутреннего содеоржимого который тоже может быть InputStream но при этом делать
close после того как документ распаршен до конца.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119401
FreeAdman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Все верно кроме того что надо с начала парсить каждый раз. Парси только свеже полученное.

Мне пора на свалку. Я об этом не подумал :(

mayton
Xml - парсеру не нужно никаких заголовков. Он будет ждать завершающегося тега

т.е. ему перенаправить поток и он сам разберется? ))
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119412
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Обычно применяется State Machine (автомат состояний).
Каждый кусок считанный из сокета переводит автомат в новое состояние (или не изменяет состояние).
В самом простейшем случае, состояние это просто весь предыдущий текст из сокета, как из вашего примера с HTTP, где каждый раз про добавлении нового куска данных все парсится заново.
Но конечно есть более оптимальные реализации.
Например можно вдобавок хранить на каком состоянии и позиции оборвался предыдущий парсинг и продолжить парсинг прямо с того же места.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119419
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman
Dima T
Все верно кроме того что надо с начала парсить каждый раз. Парси только свеже полученное.

Мне пора на свалку. Я об этом не подумал :(

mayton
Xml - парсеру не нужно никаких заголовков. Он будет ждать завершающегося тега

т.е. ему перенаправить поток и он сам разберется? ))

Да. Ниакакая длина потока ему не нужна. Длина - это вообще артефакт http-протокола
который может поддерживаться а может и нет. Для динамического содержимого этот
параметр вообще неизвестен на момент формирования хедера респонса.
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119551
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreeAdman,

Вариантов с HTTP несколько:
1) если в полученных данных первый стмвол "G", тогда читаем до тех пор пока не встретится два переноса строк. Как только пришла новая порция данных, проверяем что там, если опять не найден конец пакета, возвращаемся на чтение. Как разработчик сервера, ты можешь ограничиться неким таймаутом, поэтому плохих или медленных клиентов сбрасывать,в том числе не передающих вообще данных.

2) если первый символ "P", тогда ищем текст Content-Length:, читаем до конца строки число, ищем опять же две пустые строки и считаем размер в байтах после этих символов и ждём до тех пор, пока не наберётся не меньше указанного в заголовке.
Если же размер пакета не передали, то значит ищем 2 конца строки - далее идут данные, читаем их до тех пор, пока сокет не отключился. Как клиент отключился, значит данные дошли. Такой вариант тоже есть (вообще с серверной стороны про это почитать ещё надо, с клиентской так и работает, при скачивании файлов, когда заранее неизвестен его размер)
...
Рейтинг: 0 / 0
Сетевой обмен. Парсинг информации на лету
    #40119575
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD, "Неправильно ты, дядя Фёдор, бутерброд ешь".

P.S.
Прежде, чем раздавать вредные советы, полезно почитать спецификацию. Про диапазоны, chunked и вот это вот всё.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сетевой обмен. Парсинг информации на лету
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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