![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
ci5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Здравствуйте.
Сервер может обрабатывать около 300 соединений. Думал реализовать всё на сокетах, но есть одно но. Надо при определенных событиях сервера, делать уведомление всех клиентов об этом событии. Что-то некого бродкаста должно быть. Вот тут то я и не совсем понимаю, как это на сокетах реализовать(или вовсе не на сокетах). Реализовать через POST и GET запросы я так понимаю тут невозможно, ибо нужно держать соединение с клиентами и уведомлять их о событиях независимо от передачи ими данных, что HTTP не поддерживает. Кто что может подсказать по данному вопросу? Клиенты сами подключаются и отключаются. Заранее спасибо |
|||
|
||||
jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
А чем вам все-таки сокеты не нравятся? Рассылка всем (или некоторым) делается на ура.
|
|||
|
||||
danilych |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 2.2.2011 Репутация: 3 Всего: 3 |
посмотри atmosphere фреймворк и cometD фреймворк - небольшое описание тут
Это сообщение отредактировал(а) danilych - 30.12.2012, 01:45 |
|||
|
||||
ci5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
jManiak, я просто работал с клиент-серверными приложениями на сокетах, там суть была в запросе клиента и ответа сервера. И друг от друга они ждут указаний на блокирующих методах.
Вот как делал до этого. Но проблема была в том, что я делал подключение и указывал команду. А тут надо держать соединение. А как сделать спонтанно, что бы можно было клиентам уже подключенным передать команду, ума не приложу. Извиняюсь если глупость спрашиваю, но понять вот этот момент никак не могу, как это будет реализовано. Делать два соединения? Один для общения обычными командами, а другой для слушания сервера? danilych, к сожалению не могу использовать посторонние фреймворки. Исключительно Java SE. Но за помощь всё равно спасибо. |
|||
|
||||
jManiak |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 6.2.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
А кто мешает держать соединение на сокетах? Они собственно для этого и предназначены. Не нужно закрывать соединения. Сохраняйте у себя объекты соединений и когда потребуются, используйте их.
|
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Любая коммуникация между компьютерами реализуется на сокетах (ничего другого нет). Но по-разному. Если отправляются байтовые сообщения, то, очевидно, речь идет о протоколе на основе TCP (если используются TCP сокеты) . Если в сообщения добавляются текстовые заголовки, составленные в соответствии со спецификацией HTTP, то получаем HTTP протокол. Если клиентские приложения соединяются с сервером через интернет, то HTTP предпочтительнее, так это стандарт для интернета и позволяет избежать ограничений, связанных с файерволами. Чтобы сервер мог уведомлять клиентов, сервер должен держать соединения с клиентами. Или клиенты должны сами периодически опрашивать сервер. В этом случае задержка уведомления зависит еще и от периода опроса. HTTP позволяет организовать псевдопостоянные соединения. Сервер, отвечая на запрос клиента, может это делать бесконечно долго. Однако бесконечный ответ иногда приводит к тому, что антивирус на клиенте не пропускает ответ, пока не получит конец. Поэтому идеальным является серия относительно длительных соединений. Технологии comet , ajax как раз и используют возможности HTTP для реализации серии относительно длительных соединений. |
|||
|
||||
ci5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Благодарю за ответы.
COVD, к сожалению, нет возможности пользоваться ничем, кроме стандартного JavaSE. У меня могут передаваться как массив со строками, так и булева значения. В принципе, можно переделать архитектуру так, что бы можно было передавать только текстовые сообщения. Но тут, как новичка в HTTP, интересует три вопроса: 1. Как понимать, что клиент отключился? 2. Как держать соединение с клиентом? Их же надо будет уведомлять о событиях, независимо от их действий. Сервер же ничего не знает про клиентов, он может только что-то отправить в отклик, когда клиент что-то запросит. 3. Как это реализовать на SE? Раньше только на EE реализовывал, на сервлетах, где обработчиком был веб сервер. А тут как? Или всё же тут сокеты предпочтительней? |
|||
|
||||
jk1 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
-------------------- Opinions are like assholes — everybody has one |
||||
|
|||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
На сокетах придется самому программировать парсирование http заголовков.
Проще использовать встроенный в SE веб-сервер, пример которого привел jk1. Для получения уведомлений клиенты должны периодически слать запрос (polling). Надо только самому реализовать сессии клиентов и туда класть уведомления. Если запросы с определенным jsessionid прекратили поступать, сессия через некоторое время удаляется (по таймауту). |
|||
|
||||
ci5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
Благодарю! Но я реализовал это дело через сокеты всё же. Клиент в два потока, первый посылает команды, второй принимает. Сервер же в основном потоке делает рассылку всем, либо кому надо. В потоках непосредственно для клиентов получает данные. Получилось довольно гибко.
Но возьму на заметку про SE веб сервер. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |