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