Обработка HTTP-запроса
От: mg2i  
Дата: 14.02.12 08:55
Оценка:
Добрый день!
Подскажите, как правильно принимать и разбирать http-ответ от сервера? При условии, что в запросе Connection: Keep-Alive.
например:
— прочитать в буфер как можно больше данных в первый раз;
— разобрать буфер в поисках Content-Length, если найден, то ищем конец заголовка, вычисляем длину всего сообщения;
— вычитываем из сокета остатки запроса (или очередную порцию для вычисления длины всего сообщения);
— правильно реагируем на Connection в ответе (если close, то закрываем соединение).
Как это делать оптимально с точки зрения скорости?
http
Re: Обработка HTTP-запроса
От: boot  
Дата: 14.02.12 10:41
Оценка:
Здравствуйте, mg2i, Вы писали:


M>Добрый день!

M>Подскажите, как правильно принимать и разбирать http-ответ от сервера? При условии, что в запросе Connection: Keep-Alive.
M>например:
M>- прочитать в буфер как можно больше данных в первый раз;
M>- разобрать буфер в поисках Content-Length, если найден, то ищем конец заголовка, вычисляем длину всего сообщения;
M>- вычитываем из сокета остатки запроса (или очередную порцию для вычисления длины всего сообщения);
M>- правильно реагируем на Connection в ответе (если close, то закрываем соединение).
M>Как это делать оптимально с точки зрения скорости?

Для начала нужно прочесть код ответа сервера, т.е. первую строку, а потом, если нужно, оптимальными порциями (размер буфера по умолчанию), вычитывать и парсить остальное, тело ответа, если известна длина -- в буфер этой длины. Но это если клиент планируется "умный", если нет то пусть читает все до таймаута в большой буфер, а потом парсит, если надо.
Жизнеспособность прямо пропорциональна простоте!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.