快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

金沙国际娱城app_酒文化网进入



简介

IBM WebSphere Application Server Community Edition(以下简称 Community Edition)的 Web 消息通报办事支持将低延迟事故从办事器推送到浏览器。这是一个宣布/订阅实现,此中办金沙国际娱城app事器异步发送(宣布)数据,订阅者接管自己感兴趣的信息,支持将数据更新和事故动态地从 Java™ Messaging Service (JMS) 主题交付到 Web 浏览器。

宣布/订阅模式如图 1 所示,宣布者向各类主题宣布数据,而订阅者只接管自己感兴趣的信息。例如,订阅者 B 接管来自 Topic 1 和 Topic 2 的更新信息,但订阅者 A 和 C 只对此中一者感兴趣。

图 1. 宣布/订阅机制

客户机/办事器通信是经由过程 Bayeux 协议完成的,它是一个基于 JSON (JavaScript™ Object Notation) 的协议,用来经由过程低延迟的 HTTP 在办事器和浏览器之间异步发送消息。JSON 是一种轻量级数据互换款式。客户端支持 Dojo Toolkit 供给的 Bayeux 协议。Web 消息通报办事架起了传入的 Bayeux 哀乞降 JMS 主题之间的桥梁,使得 Web 办事或者 JMS 客户端可以宣布事故到支持 Bayeux 的 Web 客户端。

Bayeux 实现支持一种名为长轮询的特定 HTTP 措施。长轮询是一种优化传统轮询来低落延迟的技巧。在长轮询哀求中,客户机向办事器发出一个哀求来检索可用信息。办事器反省可用更新信息,假如没有更新信息,办事器将延迟完成 HTTP 哀求,直到可用信息呈现或者超时。假如在超时活动时代办事器没有任何更新,将返回一个 “无可用数据( no-data-available)” 的相应,唆使客户机重发哀求。

为了阐明这一点,本文将经由过程一个样例利用法度榜样来慢慢解说,该样例法度榜样应用 Web 消息通报办事来将一个 Ajax 客户端连接到近实时更新的数据。(为此,利用法度榜样随机天生数据来模拟实时更新。)

本文假设您对 Web 利用法度榜样开拓、JavaScript、Dojo 和 Eclipse 有必然的懂得。此外,您必要在 Community Edition 情况下安装 WebSphere Application Server Feature Pack for Web 2.0,以便于您造访样例利用法度榜样的这些 JAR 文件:

WebMsgWASCE.jar 用来向利用法度榜样供给 Web 消息通报机制,可以在 /MessagingService/lib 文件夹中找到。

JSON4J.jar 用于进行利用法度榜样中必要的 JSON 处置惩罚。可以在 /JSON4J/lib 文件夹中找到。

理解轮询措施

在传统的轮询措施中,客户机发送一个哀求到办事器,然后老是可以收到一个即时相应(假如办事器有更新数据)或者一个 “无可用数据” 的相应。客户机根据预定的光阴距离(轮询距离)依次发送另一个哀求,继承这个历程,直至办事器中有一个更新。该技巧的毛病是收集带宽应用效率低、速率慢。

该技巧的另一种规划便是长轮询,可以避免这两个问题。对付长轮询,客户机以与传统轮询类似的措施向办事器哀求信息。然而,假如办事器没有任何信息,它将维持哀求并等待客户端可用的更新信息。一旦信息可用,急速将相应发送回客户端。客户端然后立即发送另一个哀求到办事器。这样,客户端就避免了为一个相应发送多个哀求,前进了收集带宽的应用效率。(图 2)

图 2. 传统轮询与长轮询

然而,长轮询也有其自己的局限性:

术语 “Comet” 是 Alex Russell 创造的。Comet 是一个 Web 利用法度榜样模型,支持 Web 办事器发送数据到客户机,而无需显式哀求它。Comet 有两个特征:流和长轮询。Feature Pack for Web 2.0 中的 Web 消息通报特点应用 Tomcat 版本 6.0 及更高版本中可用的 Tomcat Comet。

两个连接限定(Two-connection limit):今朝 HTTP 客户端实现建议仅支持一个客户机和一个办事器之间的两个连接。是以,假如浏览器会话已经有两个连接,任何其他的连接哀求必须等待,直到两个连接中的一个完成。办理这个问题的一种措施是多路复用所有事故到同一办事器连接上。这可以经由过程 Comet 和 Cometd(一个多路复用协讲和架构)有效地办理。

每连接线程:在长轮询中,办事器保留哀求直至有了更新或者超时,这意味着要冻结连接 — 反过来说,便是线程 — 直至呈现相应或者超时。传统 I/O 为每个连接关联一个线程,而且平日 Web 办事器的线程数量是有限的。一旦所有线程都被应用,任何新的线程都将被漠视,从而觉得办事器是忙碌的。假如您想要将一个利用法度榜样利用到数千个客户机,这将会呈现问题。

另一种措施是为每个哀求绑定一个线程,是以当哀求被处置惩罚后,线程将返回线程池。然而,在长轮询中,一个客户机可能必要随时向办事器发送一个紧张哀求,是以,办事器再一次必要为每个客户机筹备一个或多个线程。再一次呈现了问题。

对付这个问题,Tomcat 的办理规划是 Advanced IO。Tomcat 应用 NIO(无壅闭 IO)来维持连接活动,无需挥霍等待中的线程。为了在一个 servlet 中方便应用 NIO,它应用了一个基于事故的 API (CometProcessor),在相宜的时刻在开放的金沙国际娱城app连接上开始适当的读和写操作。Comet 的支持使得 servlet 可以异步处置惩罚 I/O、在办事器中数据可用时接管事故、异步写入数据。

我们稍停半晌,回首一下这些术语,确保继承之前有一个基础的理解:

办事器推送是一个将数据以异步模式从办事器发送到客户机的机制。

长轮询是一种轮询技巧,此中办事器延迟完成 HTTP 哀求,直至已经为客户机筹备好了一个更新信息或发生超时。

Comet 是一种事故驱动的低延迟数据传输技巧,经由过程 HTTP 传输协议应用办事器推送机制。

CometD 是 Dojo Foundation 承接的一个项目,供给履行 Bayeux 协议的多个客户机和办事器实现。

NIO 也称为异步 IO,支持在当前哀求处置惩罚完之前处置惩罚其他哀求。

Bayeux 协议是一个在 Web 办事器和 Web 客户机之间以低延迟传输异步消息的协议(主要经由过程 HTTP)。

样例利用金沙国际娱城app法度榜样

在此描述的样例利用法度榜样(包孕在本文的 下载部分 中)是一个体育利用法度榜样,订阅两个足球队通道并实时显示球队比分。样例天生随机值作为比分更新 Web 客户端,来模拟近实时事故。Web 消息通报办事库用于合并利用法度榜样中的宣布/订阅特点。

开始利用法度榜样之前,您必要在 Community Edition 中设置设置设备摆设摆设 NIO 连接器。在 Web2.0 功能包安装路径 /MessagingService 下查看可用的 MessagingService 文档。完成之后,您可以继承应用 Web 消息通报办事进行您的样例利用法度榜样开拓。本文以下部分的步骤将描述这一历程。

1. 创建一个 Web 利用法度榜样

在 Eclipse 中,创建一个 New Dynamic Web Project(图 3)并称其为 SportsApp(图 4)金沙国际娱城app。确认 Add project to an EAR 未选中,然后单击 Finish。

图 3. 创建动态 Web 项目

图 4. 命名 Web 项目

将 WebM金沙国际娱城appsgWASCE.jar 和 JSON4J.jar 复制到项目的 lib 文件夹。

将 Dojo Toolkit 插入 Web 模块。Web 客户端必要将 dojox.cometd 库连接到 Bayeux 办事器。Dojo Toolkit 位于 /AjaxClientRuntime_1.X。结果如图 5 所示。

图 5. 利用法度榜样结构

2. 设置设置设备摆设摆设 Web 消息通报办事

创建一个名为 ScoreServlet 的 servlet,然后在 src 文件夹中(图 6)指定 Java 包 com.ibm.webmsg.sample。servlet 扩展 Web 消息通报办事供给的 BayeuxServletcalled。单击 Next。

图 6. 创建 servlet

编辑到 /scoreServlet 的 URL 映射,然后单击 Finish(图 7)。

图 7. 编辑 URL 映射

在 ScoreServlet 中,设置需要的设置设置设备摆设摆设属性,注册用于宣布/订阅机制的 URI(清单 1)。

清单 1. ScoreServlet

public class ScoreServlet extends BayeuxServlet {

private static final long serialVersionUID = 1L;

private static Logger logger = Logger.getLogger(ScoreServlet.class.getName());

public void registerURL() {

getServletUtil().addClientManager("/scoreServlet", clientManager);

logger.log(Level.INFO, "Registered the URL for comet requests.");

}

public void setProperties() {

setCometTimeout(60000);

setClientPollInterval(0);

setRouterType(JMS);

setClientsCanPublish(false);

logger.log(Level.INFO,

"Configured properties for score board requests.");

}

}

应用 registerURL() 措施,您可以注册 servlet URI (/scoreServlet)。这被 Web 消息通报办事用于 Comet 哀求。setProperties() 措施设置 Web 消息通报办事的各类设置设置设备摆设摆设参数:

setCometTimeout 抉择在超时之前哀求要在办事器端等待多长光阴。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: