Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает HTTP keep-alive 
:(
    Опции темы
mmmike
Дата 12.10.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.10.2006

Репутация: нет
Всего: нет



Такой вопрос к community: можно ли давать несколько запросов в один сокет в Java. 

Сейчас меня интересует http-протокол. Я попробовал разные варианты. Давал в первом запросе заголовок Connection: keep-alive, Conent-Length ...

Пока что результат таков: первый запрос проходит и возвращается ответ на него. После этого ответа я пишу второй запрос в сокет, но он не достигает веб-сервера.

Что нужно, чтоб следующий запрос отправлялся на сервер?

Это сообщение отредактировал(а) mmmike - 13.10.2006, 16:49
PM MAIL   Вверх
y3u
Дата 12.10.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: нет
Всего: 13



какая версия жабы?

вот под Тигру статейка...

по идее и в более ранних жабах должно работать...

Это сообщение отредактировал(а) y3u - 12.10.2006, 18:01


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
mmmike
Дата 13.10.2006, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.10.2006

Репутация: нет
Всего: нет



Спасибо за ссылку.

Жаба у меня - 1.5.0_05.

Свойство http.keepAlive по умолчанию у меня было null.

Пробовал я юзать свойства, описанные в статье (то-есть http.keepAlive и http.maxConnections), без эффекта smile ...
PM MAIL   Вверх
COVD
Дата 13.10.2006, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



А вы вручную http делаете? Создаете сокетное соединение, потом пишете туда все необходимые для http протокола заголовки?  Почему не воспользоваться стандартным URLConnection? А на серверной стороне тоже обычный сокет ( не сервлет) ?

Насколько я понимаю, keepAlive - это всего лишь рекомендация не закрывать соединение. Программист указывает, что будут повторные запросы на текущий адрес. Если приемная и передающая сторона, а также прокси, если есть, поддерживают этот механизм, то они и сами могут это реализовать, даже если не указывать keepAlive. Или нет? Иначе какой смысл в maxConnections. Выглядит, как пул соединений, и после того как отправлен запрос и получен ответ, соединение закрывается, но на самом деле оно возвращается в пул. Так возможно это реализовано в URLConnection.
PM MAIL   Вверх
mmmike
Дата 13.10.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 5.10.2006

Репутация: нет
Всего: нет



Я пробовал запросы давать вручную.

Пробовал и URLConnection, но может не очень умело. То есть не надо писать несколько запросов в одно открытое соединение? Можно его закрывать, тогда оно пойдет в пул и будет использоваться на следуещем этапе?

А как мне знать, действительно ли соединение уходит и берется из пула?
И как мне задействовать такой режим? Юзать хедер Connection: keep-alive наверно?
PM MAIL   Вверх
COVD
Дата 13.10.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 11
Всего: 43



Если у вас на сервере используется сервлет , а в клиенте URLConnection, то надо делать как в учебнике - открыл URLConnection, послал запрос, прочитал ответ, закрыл. А с соединениями они сами разберутся (закрывать их или в пул класть). 

А зачем вам узнавать используется ли keep-alive? Конечно, интересно и, наверное, можно узнать. Но вот вы узнали что у вас в тесте на локальной машине это работает. Но это не гарантия, что у реального клиента, который возможно сидит за прокси-сервером, это сработает. В этом случае клиентское приложение создает соединение не с сервером, а с прокси (если есть), а прокси (если он один) уже создает соединение с вашим сервером. И прокси-серверу, возможно, плевать на установку keep-alive. Его так настроили. Тогда вся цепочка будет вынуждена каждый раз создавать новые соединения.

Я так представляю.

И еще один момент, про который обычно забываешь. Соединение открывается и параметры запроса становятся доступными в этот момент на сервере, если используется GET, поскольку параметры включены в url. Когда же мы используем POST, мы пишем параметры запроса в OutputStream после открытия соединения. Они хранятся на клиенте (никакой flush не поможет) до момента, когда мы откроем InputStream. Только в этот момент накопленные данные пересылаются на сервер. Открывая InputStream мы заявляем о том, что передача данных закончена и мы перешли к приему. Отправить что-то через OutputStream после открытия InputStream уже невозможно.  



Это сообщение отредактировал(а) COVD - 13.10.2006, 22:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.1397 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.