| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Взаимодействие двух компов через Servlet |
| Автор: Fly1410 5.7.2007, 12:25 |
| Надо написать шашки. Что бы в них можно было играть с разных компов. Есть сервлет на которых каждый игрок посылает свой ход и этот ход отсылается сопернику. Я беру HttpServletResponse сохраняю его и когда приходит новый запрос на сервлет отправляю ответ в сохраненный HttpServletResponse. Только вот когда сервлет получает новый запрос то сохранненый HttpServletResponse закрывается и посылается пустым. Что можете посоветовать в такой ситуации делать? И как вообще можно реализовать взаимодействие двух компьютеров через сервлет? |
| Автор: Fly1410 5.7.2007, 12:49 | ||
что это? и как этим пользоваться? |
| Автор: Maksym 5.7.2007, 13:02 | ||||
| Fly1410 Это контекст, ассоциированный с web application. Одному запущенному web application соответствует один контекст, в котором можно хранить данные доступные всему application (во всех сессиях). В сервлете можно положить данные так:
Извлечь так:
|
| Автор: eXcile 5.7.2007, 13:05 |
посмотри здесь http://scopes.sourceforge.net/documentation/more-scopes/ib-application-scope.html |
| Автор: Fly1410 5.7.2007, 13:08 |
| Игрок сделал ход. Этот ход отправился на сервлет. Сервлет его сохранил, обновил расположение шашек на доске. А как вернуть ход соперника? Ведь для этого я должен дождаться нового запроса: запроса с ходом соперника. А когда соперник сделал запрос то мой HttpServletResponse закрывается автоматически:( |
| Автор: fixxer 5.7.2007, 13:14 |
| Код приведите. |
| Автор: Fly1410 5.7.2007, 13:23 | ||
вот:
|
| Автор: Maksym 5.7.2007, 13:24 |
| Fly1410 Не понятно в чем проблема. Есть сессии обоих игроков, есть расшаренный на уровень всего приложения объект состояния партии. При каждом запросе анализируешь это общий объект, изменяешь его если делается ход, возвращаешь ход соперника, изменяешь состояние "чья очередь ходить" и все тут. HttpServletResponse здесь не при чем.. Добавлено через 3 минуты и 55 секунд Fly1410 1. Для простоты используй метод service() для обработки запроса. 2. Не понимаю зачем тебе response?? Он существует и имеет смысл только в рамках обработки запроса.. Просто пиши в него результат обработки и все. 3. Для начала, попробуй положить что нибудь в конеткст сервлета в одном запросе и достать в следующем (методом, который я описал), а потом продолжим. |
| Автор: Fly1410 5.7.2007, 13:43 |
| не до конца уловил такой момент... первый ход белых e2-e4. В сервлете я получаю ход обновляю расположение фигур (в application scope) и что дальше...какой ответ? Ведь чёрные ещё не походили. А когда черные походили e7-e5 как мне белым отправить ход? |
| Автор: batigoal 5.7.2007, 13:50 |
| Fly1410, протокол HTTP сам по себе направлен только от клиента к серверу. Сервер не может инициировать соединение, он может только отвечать на запрос клиента. Поэтому взаимодействие может быть реализовано через периодические (и частые) запросы от клиента. Посмотри в сторону Ajax-технологий. Возможно, это то, что тебе нужно. |
| Автор: fixxer 5.7.2007, 14:01 | ||||
Простите, не удержался Добавлено через 57 секунд
ИМХО, это overkill |
| Автор: MisterCleric 5.7.2007, 14:02 |
| Привет. Есть такая Ajax-либа на Java DWR http://getahead.org/dwr/ - там есть пример чата. Один юзер может вообще не посылать сообщения, но видеть то, что ему послал собеседник. Такой механиз называеться "комета". Почитай, посмотри, если что спрашивай |
| Автор: fixxer 5.7.2007, 14:08 |
| Тут вообще сначала нужно прояснить вопрос: клиент тонкий (web) или GUI? |
| Автор: Maksym 5.7.2007, 14:28 |
| Fly1410 Ajax это конечно здорово, но мы пока с сервлетами не разобрались В данный момент пользователь может узнать об ответе другого игрока, обновив страницу в браузере. Можно вставить в страницу небольшой JavaScript, который будет ее обновлять, например, каждые 15 секунд. Этого будет вполне достаточно для вдумчивой неторопливой партии Когда походят черные, они изменяет наш common объект состояния партии. При перезагрузке страницы со стороны белых они получат сообщение о том, что черные походили и теперь их очередь. fixxer Речь в теме в общем то шла о сервлетах.. |
| Автор: fixxer 5.7.2007, 14:37 | ||
В общем случае никто не мешает GUI клиенту взаимодействовать с сервлетом. Из постов автора, то что у него web клиент неочевидно. Ну да ладно. Ну а если мы пока забиваем на автообновление, то схема вообще простая: Есть сервлет (или JSP), который рисует доску + форму (для простоты) чтобы сделать ход (если ход этого игрока). По сабмиту вызываем другой сервлет, который обновляет доску и редиректит на первый. Все. |
| Автор: Maksym 5.7.2007, 14:59 | ||
Да, напишем свой маленький браузер, чтобы поиграть в шашки Согласен. Зачем забивать если это http://forum.vingrad.ru/forum/topic-34734/unread-1.html. |
| Автор: fixxer 5.7.2007, 16:00 | ||
Тем более. |
| Автор: Fly1410 5.7.2007, 17:31 |
| в шашки играем через браузер у меня не получалось отправить ход соперника т.е. я пытался ждать с respons-ом до того пока не придёт следующий request. И не знал как это реализовать. Понял что никак. А выход такой <meta http-equiv=Refresh content="7;URL=/Version02/html02-1/viewforum.php"> или javaScript-ом обновлять. Спасибо большое всем за помощь. |