Поменять AJAX (Comet) и Spring MVC против Scala / LIFT? - PullRequest
17 голосов
/ 24 июня 2010

IBM демонстрирует демонстрацию того, как легко использовать Reverse AJAX с DWR 2. С другой стороны, Scala / LIFT поставляется со встроенной возможностью Reverse AJAX.

  1. Вопрос: есть ли опыт, если это нормально работает с Spring MVC?

  2. Вопрос: Если вы начинаете с нуля, каковы плюсы?и минусы для предпочтения Scala / LIFT по сравнению с DWR / Spring MVC

  3. Вопрос: В Scala / LIFT такая сложная обработка безопасности, как в Spring Security?

Ответы [ 3 ]

11 голосов
/ 29 июня 2010

Архитектура кометы Lift, которую Novell выбрала для питания своего продукта Pulse после оценки ряда различных технологий.

Реализация кометы Lift использует одно соединение HTTP для опроса изменений произвольного числа компонентов встраница.Каждый компонент имеет номер версии.Длинный опрос включает номер версии и GUID компонента.На стороне сервера прослушиватель подключен ко всем идентификаторам GUID, перечисленным в длинных запросах опроса.Если какой-либо из компонентов имеет более высокий номер версии (или номер версии увеличивается в течение периода длинного опроса), дельты (набор JavaScript, описывающий изменение от каждой версии) отправляется клиенту.Дельты применяются, и номер версии на клиенте устанавливается равным наибольшему номеру версии для набора изменений.

Lift объединяет длинный опрос с управлением сеансом, так что если запрос приходит в тот же URL во время длительного опросаЭто может вызвать истощение соединения, длительный опрос прерывается, чтобы избежать истощения соединения (некоторые браузеры имеют максимум 2 HTTP-соединения на один именованный сервер, другие имеют максимум 6).Lift также поддерживает DNS-серверы с подстановочными символами для длинных запросов на опрос, так что каждая вкладка в браузере может выполнять длительный опрос для другого DNS-сервера с подстановочными символами.Это позволяет избежать проблем с истощением соединения.

Lift динамически обнаруживает контейнер, в котором работает сервлет, и на Jetty 6 и 7, и (скоро) Glassfish, Lift будет использовать реализацию "продолжений" платформы, чтобы избежать использования потока во времядлинный опрос.

JavaScript лифта может располагаться поверх jQuery и YUI (и может также располагаться поверх Prototype / Scriptaculous.) Фактический код опроса включает в себя откат при сбоях соединения и другие «изящные»способы борьбы с временными сбоями соединения.

Я смотрел на Atmosphere, CometD, Akka (все технологии Comet, ориентированные на JVM).Ни один из них (в то время, когда я их оценивал) не поддерживал несколько компонентов на странице или предотвращал истощение соединений.

Novell начала с нуля и выбрала Lift для включения Pulse по некоторым очень веским причинам.

InС точки зрения безопасности, Лифт бьет Spring + Spring Security руки вниз.См. http://www.mail-archive.com/liftweb@googlegroups.com/msg13020.html

По сути, безопасность Lift встроена в ваше приложение.По умолчанию приложения Lift устойчивы к распространенным проблемам (межсайтовый скриптинг, атаки с повторным воспроизведением, подделки межсайтовых запросов).Приложения лифта по умолчанию устойчивы к изменению параметров.Карта сайта Lift определяет правила навигации по сайту и правила контроля доступа.Это означает, что у вас никогда не будет ссылки, по которой кто-то не сможет щелкнуть.Вам не нужно иметь внешний фильтр (например, Spring Security), который нужно настраивать независимо от приложения (упс ... переместил страницу, но забыл убедиться, что XML-файл Spring Security обновлен.)

Ох ... и если вы не хотите использовать язык шаблонов, вот полный компонент чата Lift Comet:

class Chat extends CometActor with CometListener {
  private var msgs: List[String] = Nil

  def registerWith = ChatServer

  override def lowPriority = {
    case m: List[String] => msgs = m; reRender(false)
  }

  def render = {
    <div>
    <ul>
    {
      msgs.reverse.map(m => <li>{m}</li>)
    }
    </ul>
    <lift:form>
    {
      SHtml.text("", s => ChatServer ! s)
    }
    <input type="submit" value="Chat"/>
    </lift:form>
    </div>
  }
}

И чтобы вставить это на страницу: <lift:comet type="Chat"/>

2 голосов
/ 24 июня 2010
  1. С моей точки зрения, Spring MVC - очень плохой выбор для сборки AJAXed / COMETed RIA. Компонент ModelAndView, предназначенный для работы с формами HTML и визуализации всей страницы сразу, библиотеки тегов, процедуры проверки - все лучше подходят для старомодной разработки, основанной на JSP и шаблонах. Для меня включение AJAX / COMET в Spring MVC всегда будет своего рода хаком. Однако, если вы собираетесь создавать службы RESTful с использованием @MVC (меняя JSON с вашим пользовательским интерфейсом javascript), это может сработать (хотя я бы предпочел использовать Jersey / JAXB для этих целей).
  2. LIFT изначально был разработан для работы с COMET, поэтому будет лучшим выбором. Хотя я бы выбрал что-то гораздо более легкое и без шаблонов, чем LIFT (что касается меня, оно страдает от той же болезни, что и Spring MVC).
  3. Обе системы безопасности охватывают только основные сценарии и требуют большой настройки для использования в реальных проектах.

    Вот что я бы использовал для построения COMETed RIA в Scala:

    • Джерси (облегченные RESTful-сервисы для взаимодействия с JS UI через HTTP / JSON) + Атмосфера (масштабируемое решение для создания приложений COMET) + любая инфраструктура JS (jquery, YUI, ext JS, ...). Вы также должны взглянуть на Akka Framework , который интегрирован как с Джерси, так и с Атмосферой, и позволяет создавать веб-приложения RIA в идиоматическом Scala. Вот пример pub-sub COMET *1017* в Akka.
    • Ваадин + ICEPush . Это будет очень удобная комбинация для вас, если вы не хотите пачкать руки с помощью JS (хотя ICEpush еще не является готовым решением для предприятия).
0 голосов
/ 17 января 2011

Другая альтернатива, центрированная на чистой Java (или с любым другим языком JVM, включая Scala), ItsNat Comet .

...