Grizzly和comet介绍(译)

本文介绍如何使用 Grizzly 的 Comet 技术实现异步 Web 应用,通过长期存活的 HTTP 连接减少消息传递延迟,使服务器能在无需客户端请求的情况下主动推送数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感觉不是什么新技术,也不是什么新创意,可是一旦用起来可能对技术的影响不小,客户端如果使用长连接的话事情就少多了。原文格式的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
内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值