Реализовать серверную рассылку с помощью GWTP - PullRequest
1 голос
/ 13 ноября 2011

Я получил проект с использованием GWTP (который включает разделение MVP, Gin и Dispatch), теперь я нахожусь в ситуации, когда требуется, чтобы изменения на сервере передавались конкретным клиентам

Я читал документацию по gwt-comet и gwteventservice. Кажется, что первая не работает с RPC, а вторая - RPC Ecnapsulate, для которой я не знаю, как вписать ее в мой текущий шаблон команд из GWTP. Идеи?

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Я использовал gwt-comet (http://code.google.com/p/gwt-comet/). Это нативная реализация кометы, работающая довольно хорошо, как RPC, вы также можете отправлять Strings или ваши GWT-сериализованные объекты. И самое лучшее, что вам не нужно делать много вещей, чтобы это работало.

0 голосов
/ 25 июня 2012

Это действительно проблема с сервлетами, а не проблема GWT или GWTP.

Так что есть несколько подходов к этому, самый стабильный (на мой взгляд) - иметь длинный или блокирующий сервлет опроса. По сути, это сервлет, который опрашивается клиентом и удерживает соединение открытым в течение некоторого периода времени, если нет сообщения для «проталкивания» клиенту, и если проходит слишком много времени (это позволяет обойти таймауты http) сердцебиение возвращается какой-то. В любом случае, когда запрос запроса сервлета возвращается, клиент просто делает другой запрос. На мой взгляд, это самый переносимый и стабильный способ, поскольку он использует только API-интерфейс основного сервлета, не страдает сетевыми проблемами, а блокирующая часть позволяет вам проводить опрос 'park' на сервере в течение некоторого периода времени. и снижает общую нагрузку на запрос, позволяя очень быстро возвращать новую информацию клиенту, когда она доступна.

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

Комета также может работать, но, как правило, она ограничивает вас одним типом сервера, который может подойти для вашего приложения. Будьте здесь !!!! Я проводил только очень маленькие тесты с кометой, для меня это было непросто, когда я его настраивал, и оно было не таким устойчивым, как решение для блокирующего опроса , как я его настроил .

Теперь, на мой взгляд, самый важный из них, но этот очень ограничен из-за сетевых ограничений, возможно, для приложений интрасети в одном домене, - это использование push-апплета. Эта настройка (которую можно выполнить с помощью udp или прямого сокета, я сделал всю сеть, просто чтобы концептуально все упростить) берет апплет, использует его для раскрутки экземпляра сервера Jetty на клиенте, и на странице публикуется конечная точка клиента на сервер. На этом этапе клиент может связаться с сервером с помощью своих сервлетов, а сервер может связаться с клиентом с помощью сервлетов, представленных на сервере Jetty. Это настоящий толчок, это безразлично, но существуют сетевые кошмары.

Итак, из всего вышесказанного я использую длинные опросы, следя за веб-сокетами, так как они являются моим будущим, и мне действительно нравится версия на основе апплета, хотя она довольно ограничена в использовании из-за ограничений сетевого разрешения.

Как только вы решите это, из GWTP у вас будут просто действия или методы моста JSNI, необходимые для подключения к вашему серверу и получения ответов. Я не буду вдаваться в подробности, так как это действительно основной вопрос сервлета / http / javascript, а не вопрос GWT или GWTP.

Надеюсь, это поможет!

0 голосов
/ 13 ноября 2011

Я использовал «Server Push in GWT», описанный здесь http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ - казалось, что он неплохо работает для небольшого проекта.

...