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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Соеденение "keep Alive", HTTPURlconnection + Tomcat 
:(
    Опции темы
sergejzr
Дата 20.10.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Может у кого нибудь есть пример, как с помощью этой технологии несколько раз обменяться информацией между клиентом и сервером?

Вот что пытаюсь сделать, но вылетает, говорит, что на клиенте после того как с connection'a считал, нельзя больше писать.

Код

//Сервлет:
public class KeepAliveServer extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        for (int cnt = 0; cnt < 5; cnt++) {
            
            InputStream is = request.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String f = br.readLine(); //Зачитываем обьект

            f += "-" + new Date();  //Изменяем обьект
            
            OutputStream os = response.getOutputStream();
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
            bw.write(f); //Возвращаем обьект клиенту

//закрываем соедение, но не рассоеденяемся
            os.close();
            os.flush();
        }
    }
}



Код

//Клиент:
public class KeepAliveClient {
    public static void main(String[] args) throws IOException {

        URL url = new URL("http://localhost:8080/peertrust/keepAlive");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        String f = "begin";  //Эту строку хочу 5 раз послать туда-сюда, изменяя каждый раз
        con.setDoOutput(true);
        con.setDoInput(true);

        for (int cnt = 0; cnt < 5; cnt++) {

            con.connect();
            OutputStream os = con.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
            bw.write(f);  //Посылаем строку
            os.flush();

            InputStream is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            f = br.readLine();  //Считываем изменённую строку с сервера

            System.out.print(f);
            is.close();
            os.close();
        }
    }
}


Хочу отослать строку на сервер, изменить её там, получить обратно и так несколько раз не создавая новых соедений....
Есть идеи, как это сделать?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
COVD
Дата 20.10.2007, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Никак, если используете стандартные библиотеки - для каждой пары запрос-ответ надо создавать новое соединение. 

Или воспользуйтесь новой технологией Comet . Томкат 6 уже поддерживает эту технологию. Примеры клиентов для этого способа коммуникации (асинхронные обмен сообщениями в пределах одного http соединения) в основном пишут на java script . Возможно и на java уже кто-нибудь написал. Может, найдете.

http://tomcat.apache.org/tomcat-6.0-doc/aio.html
http://wiki.apache.org/tomcat/WhatIsComet
PM MAIL   Вверх
Alexandr87
Дата 20.10.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

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



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

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

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


 




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


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

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