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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие двух компов через Servlet 
:(
    Опции темы
Fly1410
Дата 5.7.2007, 12:25 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Надо написать шашки. Что бы в них можно было играть с разных компов.

Есть сервлет на которых каждый игрок посылает свой ход и этот ход отсылается сопернику. Я беру  HttpServletResponse сохраняю его и когда приходит новый запрос на сервлет отправляю ответ в сохраненный  HttpServletResponse. 

Только вот когда сервлет получает новый запрос то сохранненый HttpServletResponse закрывается и посылается пустым. 

Что можете посоветовать в такой ситуации делать? И как вообще можно реализовать взаимодействие двух компьютеров через сервлет?

PM MAIL   Вверх
Maksym
Дата 5.7.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Цитата(Fly1410 @  5.7.2007,  12:25 Найти цитируемый пост)
Что можете посоветовать в такой ситуации делать? И как вообще можно реализовать взаимодействие двух компьютеров через сервлет?

Самый простой путь: положить какой-нибудь объект (например расположение шашек на доске) в application scope и обеспечить к синхронизированный доступ к его свойствам и методам.
PM MAIL   Вверх
Fly1410
Дата 5.7.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

application scope 


что это? и как этим пользоваться?

PM MAIL   Вверх
Maksym
Дата 5.7.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Fly1410
Это контекст, ассоциированный с web application. Одному запущенному web application соответствует один контекст, в котором можно хранить данные доступные всему application (во всех сессиях).
В сервлете можно положить данные так:
Код

getServletContext().setAttribute("objectName", new MyObject());

Извлечь так:
Код

Object objectFromContext =  getServletContext().getAttribute("objectName");
MyObject myObject = null;
if (myObject!=null) {
    myObject = (MyObject) objectFromContext;
}



Это сообщение отредактировал(а) Maksym - 5.7.2007, 13:05
PM MAIL   Вверх
eXcile
Дата 5.7.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Fly1410 @  5.7.2007,  12:49 Найти цитируемый пост)
 что это? и как этим пользоваться?


посмотри здесь

http://scopes.sourceforge.net/documentatio...tion-scope.html

Это сообщение отредактировал(а) eXcile - 5.7.2007, 13:06
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Fly1410
Дата 5.7.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Игрок сделал ход. Этот ход отправился на сервлет. Сервлет его сохранил, обновил расположение шашек на доске. А как вернуть ход соперника? Ведь для этого я должен дождаться нового запроса: запроса с ходом соперника. А когда соперник сделал запрос то мой HttpServletResponse закрывается автоматически:(
PM MAIL   Вверх
fixxer
Дата 5.7.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код приведите.


--------------------
user posted image
PM MAIL ICQ   Вверх
Fly1410
Дата 5.7.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вот:

Код


public class s2 extends HttpServlet {
        
    PrintWriter lastWriter;
    
    
    public void init() throws ServletException {
        lastWriter=null;        
    }

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

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //а предыдущий запрос я посылаю полученных параметр 
        say(request.getParameter("say"));
        //сохрания текущий HttpServletResponse 
        waitForNext(response);
    }
    

    
    private void waitForNext(HttpServletResponse response) throws IOException{

        lastWriter = response.getWriter();
    }
    
    private void say(String s) throws IOException{
        if (lastWriter!=null){
            lastWriter.print(s);
            lastWriter.flush();
            lastWriter.close();
        }
    }

}


PM MAIL   Вверх
Maksym
Дата 5.7.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Fly1410
Не понятно в чем проблема. Есть сессии обоих игроков, есть расшаренный на уровень всего приложения объект состояния партии. При каждом запросе анализируешь это общий объект, изменяешь его если делается ход, возвращаешь ход соперника, изменяешь состояние "чья очередь ходить" и все тут. HttpServletResponse здесь не при чем..

Добавлено через 3 минуты и 55 секунд
Fly1410
1. Для простоты используй метод service() для обработки запроса. 
2. Не понимаю зачем тебе response?? Он существует и имеет смысл только в рамках обработки запроса.. Просто пиши в него результат обработки и все.
3. Для начала, попробуй положить что нибудь в конеткст сервлета в одном запросе и достать в следующем (методом, который я описал), а потом продолжим.
PM MAIL   Вверх
Fly1410
Дата 5.7.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



не до конца уловил такой момент... smile 

первый ход белых e2-e4. В сервлете я получаю ход обновляю расположение фигур (в application scope)
и что дальше...какой ответ? Ведь чёрные ещё не походили. А когда черные походили e7-e5 как мне белым отправить ход? 
PM MAIL   Вверх
batigoal
Дата 5.7.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Fly1410, протокол HTTP сам по себе направлен только от клиента к серверу. Сервер не может инициировать соединение, он может только отвечать на запрос клиента. Поэтому взаимодействие может быть реализовано через периодические (и частые) запросы от клиента.

Посмотри в сторону Ajax-технологий. Возможно, это то, что тебе нужно.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
fixxer
Дата 5.7.2007, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Fly1410 @ 5.7.2007,  13:43)
первый ход белых e2-e4. 

 smile шашки так не ходят
Простите, не удержался  smile

Добавлено через 57 секунд
Цитата(batigoal @ 5.7.2007,  13:50)
Посмотри в сторону Ajax-технологий. Возможно, это то, что тебе нужно.

ИМХО, это overkill


--------------------
user posted image
PM MAIL ICQ   Вверх
MisterCleric
Дата 5.7.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Привет. Есть такая Ajax-либа на Java DWR Direct Web Remoting - там есть пример чата. Один юзер может вообще не посылать сообщения, но видеть то, что ему послал собеседник. Такой механиз называеться "комета".
Почитай, посмотри, если что спрашивай


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
fixxer
Дата 5.7.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тут вообще сначала нужно прояснить вопрос: клиент тонкий (web) или GUI?


--------------------
user posted image
PM MAIL ICQ   Вверх
Maksym
Дата 5.7.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Fly1410
Ajax это конечно здорово, но мы пока с сервлетами не разобрались smile 
В данный момент пользователь может узнать об ответе другого игрока, обновив страницу в браузере. Можно вставить в страницу небольшой JavaScript, который будет ее обновлять, например, каждые 15 секунд. Этого будет вполне достаточно для вдумчивой неторопливой партии smile
Когда походят черные, они изменяет наш common объект состояния партии. 
При перезагрузке страницы со стороны белых они получат сообщение о том, что черные походили и теперь их очередь.
fixxer
Речь в теме в общем то шла о сервлетах..
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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