Лучшее решение для Java нажатие HTTP [закрытый] (обмен сообщениями)

У Вас есть здание. Здание имеет 20 комнат. По закону у Вас может только быть определенное количество людей в каждой комнате. Ваше задание должно автоматически присвоить людей комнате. Если я, комната становится полной, необходимо найти свободный номер. Учитывая, что только определенные комнаты могут содержать определенных людей, также необходимо быть осторожными на который комната.

, Например:

Комнаты 1, 2, 3 могут сыпаться друг другу. Эта комната для детей, которые не могут идти самостоятельно, таким образом, Вы хотите, чтобы они далеко от всего остального избежали отвлечения и другой болезни (который не является вещью пожилым людям, но к 6 мес это может стать очень плохим. Если все три полны, человеку нужно отказать во входе.

Комнаты 4, 5, 6 могут сыпаться друг другу. Эта комната для людей, у которых аллергия на арахис и таким образом, они не могут войти в другие комнаты (который может иметь материал с арахисом). Если все три становятся полными, предлагают предупреждение, спрашивая их уровень аллергии и perahsp, они могут быть предоставленным доступом.

В любой момент времени, комнаты могут измениться. Таким образом, можно позволить комнате 7-14 быть комнатами без арахисов. Вы не знаете сколько комнат проверять.

Или, возможно, Вы хотите отделиться на основе возраста. Класс, пол, и т.д. Это просто пара примеров, к которым я вошел.

17
задан Jason Gritman 13 November 2009 в 12:32
поделиться

4 ответа

Самым простым решением по многим и многим причинам является использование подхода, основанного на комете (как вы упомянули). Это означает, что клиенты (которым вы хотите «отправлять» сообщения) открывают долгоживущие HTTP-соединения. Эти соединения остаются открытыми до тех пор, пока не истечет время их ожидания или пока вы не отправите клиенту сообщение. Как только это произойдет, клиент открывает новое соединение.

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

Если только ваши клиенты являются настоящими серверами (в этом случае вы действительно являетесь клиентом), пусть они свяжутся с вами и отправят ответ на имитацию push.

9
ответ дан 30 November 2019 в 13:53
поделиться

Atmosphere и DWR - это среды с открытым исходным кодом, которые могут упростить Comet на Java.

7
ответ дан 30 November 2019 в 13:53
поделиться

Мы использовали COMET вместе с JMS, используя WAS Web 2.0 Feature Pack ; фактически сервер подписался на JMS и отправил сообщение в браузер через COMET. как разработчик «чувствовал», что браузер подписывается на JMS. Это «просто сработало», поэтому мы не стали больше искать альтернативы.

Я мог представить себе реализацию JMS на чистом JavaScript в браузере с использованием HTTP в качестве транспорта, но я считаю, что это будет очень тяжеловесно. Я не знаю таких реализаций.

1
ответ дан 30 November 2019 в 13:53
поделиться

Альтернативный подход к уже обсуждавшимся (например, Comet и т. Д.) - реализовать опрос на клиенте. Обратной стороной этого подхода является то, что у вас неизбежно возникает задержка с момента сообщения / события и до его получения клиентом. Если ваше приложение очень чувствительно к таким задержкам, опрос отключен.

Если допустима определенная задержка (как минимум, порядка нескольких секунд), опрос не является злоупотреблением протоколом HTTP. Он также более устойчив к временным сетевым неполадкам, так как сервер по умолчанию ставит сообщения в очередь и не расстраивается, если клиент недоступен по его расписанию.

1
ответ дан 30 November 2019 в 13:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: