Статьи

Вход в рамки атмосферы: комета для всех и везде

Представляем Atmosphere, новый фреймворк для создания портативных приложений на базе Comet. Да, переносимый, что означает, что он может работать на Tomcat , Jetty , Grizzly / GlassFish или на любом веб-сервере, поддерживающем Servlet 2.5 … и без необходимости изучать все эти частные API, плавающие вокруг …

IMG_0090 copy.JPG

В настоящее время, написание портативных приложений Comet невозможно: JBossWeb имеет AIO , Tomcat имеет другой AIO API , Jetty имеет Продолжение API и предварительно Servlet 3.0 API поддержки, Grizzly имеет Comet Framework и Grizzlet API и т.д. Таким образом, структуры , как ДВР , ICEFaces и Bindows все добавили встроенную поддержку и абстрагировали слой для поддержки различных API Comet. Хуже того, если ваше приложение использует эти API напрямую, то вы застряли на одном веб-сервере. Неплохо, если вы используете Grizzly Comet, но если вы используете конкурента, вы не можете встретить Grizzly !

Текущий EG Servlet работает над предложением добавить поддержку Comet в будущую спецификацию Servlet 3.0, но прежде чем планета полностью поддержит эту спецификацию, может потребоваться время. И предложение будет содержать небольшое подмножество текущего набора функций, которые некоторые контейнеры уже поддерживают, такие как асинхронный ввод / вывод (Tomcat, Grizzly), управляемый контейнером пул потоков для одновременной обработки операций push , фильтры для операций push. и т.д. Не сказать, что при использовании Atmosphere фреймворку больше не придется заботиться о нативной реализации, а вместо этого строить поверх Atmosphere. Такой протокол, как Bayeux, будет бесплатным и будет работать на всех WebServer, используя их собственный API.

Итак, я запускаю Atmosphere, надеясь сократить разрыв и упростить создание приложений на основе Comet, основываясь на опыте и отзывах, которые я получил за два года работы с Grizzly Comet Framework. Атмосфера — это основанный на POJO фреймворк, использующий Inversion of Control (IoC), пытающийся донести Ajax Push / Comet до массы! Атмосфера строится на основе кода Джерси и Grizzly Comet. Теперь, честно говоря, проект только начинается (возникли некоторые проблемы из-за внутренней утечки информации :-)), и может пройти несколько месяцев, прежде чем я смогу поддерживать весь WebServer. Я стремлюсь развить концепцию Grizzlet и сделать модель программирования действительно простой. Пока что у меня выглядит так:

 


/**
 * This Grizzlet can only receive push from that application, e.g. from other Grizzlet defined under the myGrizzlet/* path 
 * (defined using the @Path annotation)
 */
@Grizzlet(Grizzlet.Scope.APPLICATION)
@Path("myGrizzlet")
public class MyGrizzlet{
    /**
     * Broadcast notification to all Grizzlet defined inside the current VM.
     */
    @Broadcaster(Grizzlet.Scope.VM)
    private Broadcaster bc;
    
    /**
     * Suspend the connection for 6000 milliseconds on GET request, and push the 
     * return value.
     */
    @Suspend(6000)
    @GET     
    @Push
    public String onGet(){        
        bc.brodcast("A new user has connected");
        return "Suspending the connection";
    }


    /**
     * On POST, push the return value.
     */
    @POST     
    @Push
    public String onPost(@Context HttpServletRequest req,
                         @Context HttpServletResponse res) throws IOException{  
        res.setStatus(200);
        res.getWriter().println("OK, info pushed");
        return req.getParameter("chatMessage");
    }    
    
    /**
     * Resume the connection after one push (long polling), and push the return
     * value.
     */
    @Resume(1)
    @Push
    public String onPush(String event,@Context HttpServletResponse res) throws IOException{
        res.getWriter().println(event);  
        return "Resuming the connection";
    }
}

 

Приведенный выше пример, конечно, довольно прост, но он демонстрирует цель, которую я имею с Атмосферой: сделать так, чтобы любой мог легко написать приложение Comet. Выше приведено смешное приложение чата, которое приостанавливает запрос при отправке GET, помещает данные в POST и просто слепо записывает «отправленные» данные.

Итак, в ближайшие недели я начну давать больше примеров и, что более важно, перенесу код в репозиторий. К сожалению, меня отвлекают другие проекты, над которыми я работаю, поэтому проект может начаться медленно, но моя цель — создать сильное сообщество, как я это сделал с проектом Grizzly, поэтому проект развивается быстрее и открыт для всех …. Заинтересованы? Просто войдите в список рассылки Atmosphere . У меня много работы для тех, кто заинтересован участвовать!

С http://weblogs.java.net/blog/jfarcand