`

Grizzly和comet介绍(译)

    博客分类:
  • Java
阅读更多
感觉不是什么新技术,也不是什么新创意,可是一旦用起来可能对技术的影响不小,客户端如果使用长连接的话事情就少多了。原文格式的PDF,看了一下,感觉可以,就译了过来。



原文的标题是Implementing Asynchronous Web Application using Grizzly's Comet



什么是Grizzly?

Grizzly是一个用于构建可信赖的服务应用的通用的NIO框架,它支持中断及非中断socket操作,包括普通或SSL连接,其扩展当前由Sun的几个内部项目(Alaska,GlassFish,Tango等),以及外部项目(Jetty6.1)使用。V2版本将目标定于GlassFish9.1,并将由ORB,MQ使用,也可能包括JAX-WS。

Comet:

一种编程技术,可以使web服务器在客户端不必发送任何请求的情况下发送数据到客户端,它允许创建驻留于浏览器的事件驱动的web应用。

Comet应用与传统应用的区别如下:

http://alex.dojotoolkit.org/?p=545



基本上,它们都使用长期存活的HTTP连接以减少传递给服务器的消息的延迟。

在实质上,他们都不会偶尔轮询服务器,取而代之是服务器具有一条开放的通讯线路,并且可以使用该线路将数据推入客户端。



Comet应用程序可以在任何时候将数据交付至客户端,而不是只响应用户输入。数据由单条,预先开启的连接交付。该方法极大减少了数据交付的延迟。

Grizzly内部的Commet支持细节:

在Grizzly异步请求处理扩展(Grizzly Asynchronous Request Processing extension)之上实现。
隐藏了NIO/Asynchronous Request Processing的复杂性
支持clean以及ssl连接
对JSF,JSP,Servlet,POJO,Javascript(Phobos)可用。
主要目的:简化它!
Grizzly Comet:定义

CometContext:可共享的“空间”,应用可以订购它,之后在上下文更新时被更新。
CometEvent:一个持有Coment Context(内容更新,客户端连接/断开之类)的状态的对象。
CometHandler:一个应用程序为成了一个或几个ComentContext的成员必须实现的接口。
流程:

首先,应用创建一个新的Comet上下文。
将你的Comet request handler加入到该上下文中,通常一个连接创建一个handler。
客户端开放单条连接至一个可共享的上下文。
当一个客户端推送数据时,所有其它的客户端都被更新。
当上下文改变时,客户端都被更新。
实现Comet:四个简单步骤

为一个已有应用加入Comet支持很简单(不需要大规模重构)。
下面四个步聚将描述怎么加入支持
更多细节可以在第二部分找到
首先,注册到一个新的或是已有的Comet context。该context通常使用一个context路径创建(但不是必须的)。
CometEngine cometEngine=CometEngine.getEngine();
CometContext context=cometEngine.register(contextPath);
实现Comet handler接口:
public void attach(E attachment);
public void onEvent(CometEvent event);
public void onInitialize(CometEvent event);
public void onTerminate(CometEvent event);
public void onInterrupt(CometEvent event);
将Comet handler加入到上下文中
下一步,初始化Comet request handler并将其加入到context
MyCometHandler handler = new MyCometHandler();
cometContext.addCometHandler(handler);
广告变更
一旦Comet handler被加入到context,你就可以开始发布事件了,你可以注意到当客户端推送数据或当一些外部事物发生变化时context的情况(如数据库)。
cometContext.notify("Comet is cool");
Comet handler示例



对于一个Servlet,大多数情况下你会使用HttpServletResponse来实现CometHandler:

public class CometResponseHandler implements
CometHandler{
public void attach(HttpServletResponse
httpServletResponse){
this.httpServletResponse =
httpServletResponse;



且onEvent方法大部分情况下看起来是这样的:

public void onEvent(CometEvent event) throws IOException{
try{
PrintWriter printWriter = httpServletResponse.getWriter();
printWriter.println(event.attachment());
printWriter.flush();
} catch (Throwable t){
t.printStackTrace();
}



下一步做什么呢?

构建一个应用程序可重用的handler集合:

一个针对Servlet/Jsp/JSF

一个针对Phobos

一个针对POJO

构建一个针对AJAX|JMaki的可重用客户端组件。

加入comet支持

(由一个叫Bayeux的协议,javascript库(dojo工具箱),以及一个事件服务器(Grizzly)组成),当前一个外部小组正在开发它。



下面都是废话,贴些有用的地址。

此文的参考文献:

[1]http://weblogs.java.net/blog/jfarcand/archive/2006/02/grizzly_pa
rt_ii.html
? [2]http://weblogs.java.net/blog/jfarcand/archive/2006/07/the_grizzly_com.html
分享到:
评论

相关推荐

    在Glassfish v2ur1 中测试grizzly comet chat demo

    【标题】"在Glassfish v2...通过深入学习和实践这个示例,开发者可以掌握如何在Java环境中构建实时聊天应用,同时也能够提升对Grizzly框架和Comet技术的理解。这对于开发需要实时交互功能的Web应用来说是非常有价值的。

    Grizzly_Architecture

    通过上述介绍可以看出,Grizzly不仅仅是一个高性能的网络通信框架,它还拥有丰富的功能和良好的可扩展性。对于那些希望在Java平台上构建高性能网络应用的开发者来说,Grizzly无疑是一个值得深入研究的优秀工具。

    java-comet

    3. Grizzly Comet Support:Grizzly网络应用框架中的Comet支持,用于构建高性能的实时Web应用。 五、Java-Comet的挑战与解决方案 1. 浏览器兼容性:不同的浏览器对Comet的支持程度不同,需要考虑跨浏览器的实现策略...

    grizzly-http-webserver-1.9.59.zip

    2. **模块化设计**:Grizzly由一系列可组合的过滤器和处理器组成,开发者可以根据需求选择和配置不同的组件,实现高度定制化的Web服务器。 3. **性能优化**:Grizzly对内存管理、线程调度等方面进行了优化,减少了...

    服务器推送pushlet讲解

    Pushlet框架是Comet技术的一个具体实现,由Jaekson和Grizzly项目开发。它是一个轻量级的、可扩展的框架,支持多种推送模式,如长轮询、HTTP流和HTTP片段。Pushlet的核心概念包括Pushlet服务器、Pushlet客户端和...

    灰熊:用Java:trade_mark:编程语言编写可伸缩服务器应用程序一直很困难。 在Java New IO API(NIO)出现之前,线程管理问题使服务器无法扩展到成千上万的用户。 Grizzly NIO框架旨在帮助开发人员利用Java:trade_mark:NIO API。

    Grizzly的目标是帮助开发人员使用NIO构建可扩展且强大的服务器,并提供扩展的框架组件:Web框架(HTTP / S),WebSocket,Comet等!入门灰熊目前在以下分支机构中有几条发展线: 2.3.x:这是2.

    开源技术讲座Sun 济南地区开源大使田贯升

    GlassFish还集成了一系列先进技术,如Grizzly's Comet、jRuby on Rails和Metro等,同时提供友好的更新中心和控制界面。 ### GlassFish的企业级功能 对于企业用户,GlassFish提供了全面的功能,包括高性能的Web服务...

    Atmosphere白皮书

    - **概念**: 介绍了Atmosphere Spade Server的功能和特点。 - **应用场景**: 适用于高性能服务器的需求。 6. **第6章:Bayeux协议的支持** - **内容**: 介绍了如何在Atmosphere框架中支持Bayeux协议,这是一种...

Global site tag (gtag.js) - Google Analytics