关于ZK框架的服务推实现,ZK3 和ZK5 有着很大的不同。这也是在small talk和how—to wiki里面看到的。
server-push服务推技术的兴起主要是因为http的无状态链接,导致服务端有什么信息, 比较难推到客户端。传统的ajax的形式,就是客户端不停的向服务端发出请求,来取得服务端的信息。现在server-push有多种方式, 有兴趣的可以去了解一下。ZK框架对于server-push也是实现了多种方式。
像第一篇文章里面那样, java 服务端完全有可能操作客户端的组件,服务端和客户端的紧密使得服务推在这里没有多大的作用,不过还是介绍一下吧。
ZK早期的的server-push实现方式:
其实现分为几个步骤:1,开启界面的server-push 2,创建服务端的java线程,并且把界面元素作为参数传递给java线程,主要是因为要不停的发信息给客户端所以开线程。 3,在java线程开启的时候,也一样要开启desktop的server-push,且在发送信息之前要使用Executions.active(desktop) ,将信息发送完成后,需要deactive,并且enable desktop的server-push功能。
特点:常规的服务端java对客户端进行控制的话,需要extends ZK框架里面的自带的composer类或者是Window类,以这种方式就可以传递desktop,操作其desktop,并且可以继承其他的类型,完成更多的功能。
案例:(参考官方提供)
a.zul 里面在zscript里面开启客户端desktop的server-push功能。开启java线程。(ps.使用zscript通过language属性指定可以嵌入并运行很多中脚本语言javascript等)
//开启desktop的服务推
if(!desktop.isServerPushEnabled()){
desktop.enableServerPush(true);
}
XYModel xymodel=new SimpleXYModel();
timeseries.setModel(xymodel);
//开启服务端的java线程。并传递需要实时更新的组件。
ins.ZKServerPush.StockEx.StockChartUpdate scp=new ins.ZKServerPush.StockEx.StockChartUpdate(timeseries);
scp.start();
a.java
public void run() {
if (!_desktop.isServerPushEnabled())
//发送开启
_desktop.enableServerPush(true);
try {
while (!_ceased) {
//激活
Executions.activate(_desktop);
try {
updateChart();
} finally {//停滞
Executions.deactivate(_desktop);
}
Threads.sleep(2000);
}
} catch (Exception ex) {
System.out.println(“error!!!!”);
} finally {
if (_desktop.isServerPushEnabled())
//发送关闭
_desktop.enableServerPush(false);
}
}
改进版:在上个案例中后台数据的改变就得改变组件形态并更新一番,在这使用SimpleListModelShare 可以在后台数据改变的时候,客户端组件自动更新。
1,指定哪个数据,stockModel.
modelSharer = new SimpleListModelSharer(stockModel);
2,指定代理的桌面
public ListModel getProxy(Desktop desktop) {
return modelSharer.getProxy(desktop);
}
当stockModel的数据改变的时候,组件中使用stockModel的也会更随改变。
近期常用的方式, 使用EventQueues在application、session等灵活的publish事件,同时又subscribe来监听,得到监听信息就改变客户端状态。这种方式客户端界面不用改变什么,也不用激活server-push。
这里的desktop不作为参数传递,使用Composer来监控客户端组件,如果有比较多信息需要实时的传递,比如聊天的项目,当a用户在聊天室里面发言, 其他的用户接受到a用户留言信息并显示, 可以使用EventQueues来发布(publish)a用户发言的事件,而其他用户则监听(subscribe)此事件,事件触发时并显示其a用户留言。
ZK框架的灵活是很不错的!
以上是我对ZK框架server-push的一点总结。有不对的地方,欢迎大家指正。
分享到:
相关推荐
### SMC ZK2-ZSEA-A 设置方法详解 #### 一、产品概述 SMC ZK2-ZSEA-A是一款带有节能功能的真空发生器,它采用数字式压力开关技术,适用于各种工业自动化应用场景。该型号的产品能够有效提高真空系统的效率,并具备...
【标题】"zk-bin-5.0.0-RC.zip_DEMO_fckez.jar_zk_zk demo_zk-demo-5.0.z" 暗示这是一个关于Zookeeper的演示项目,版本为5.0.0-RC。其中包含了一个名为`fckez.jar`的应用程序,以及与Zookeeper(zk)相关的示例代码...
2. 对于Myeclipse,安装速度较快,可以直接通过窗口->首选项->ZK->ZK Package,添加zk-bin-prof-3.6.0.zip文件。 **二、ZK开发环境搭建** ZK的开发环境主要涉及JAR包的导入和web.xml的配置。首先,需要将ZK的相关...
幸福象花一样 ZKZK REMIX_2---02.flp
"zk-bin-std-3.0.1" 是一个与ZK框架相关的软件包,它包含ZK框架的标准版本3.0.1的所有组件。ZK是一个基于Java的客户端服务器端架构的用户界面(UI)开发框架,尤其适用于构建富互联网应用程序(RIA)。它的主要特点...
标题中的"zk-src-6.0.1.zip_zk_zk_java_zk-src-6.5.1.1"指的是ZK框架的源代码压缩包,包含版本6.0.1和6.5.1.1。ZK是一个基于Java开发的用户界面框架,专门用于构建富Web应用。这里提到了两个版本的源代码,意味着...
标题中的"zk-zss-bin-1.0.0-RC2.zip"是一个关于Zookeeper的软件包,其中"zk"代表Zookeeper,"zss"可能是Zookeeper Server Statistics的缩写,而"bin"通常指的是可执行文件或二进制文件的目录。"1.0.0-RC2"是版本号,...
文件提供的信息中关于股票的基本概念、特征和作用,虽然和标题“ZK框架:Ajax开发实战”不直接相关,但通过提取和整合其中的股票知识,我们可以更全面地理解股票市场的基本运作机制,这对于培养投资意识和财务知识也...
| `zk-bin-std-3.0.0.tar.gz` | 最小化的二进制版本,仅包含基本的“胖客户端”需求。 | | `zk-bin-prof-3.0.0.tar.gz` | 包含标准版,外加 layouts、JFreeChart、Google Maps 和其他布局组件。 | | `zk-bin-3.0.0....
标题中的“wxh zk-src-3.0.3-2008-01-31”似乎是指一个名为“zk-src”的项目或软件的版本信息,版本号为3.0.3,发布日期为2008年1月31日。这个“wxh”可能是个人或团队的名字,也可能是项目的一部分标识。描述和标签...
【标题】"zk-bin-3.6.2.zip_zk_zk version 3_zk-bin-5.0.2" 涉及到的是ZooKeeper的两个不同版本,即3.6.2和5.0.2。ZooKeeper是一个分布式协调服务,广泛应用于大数据和分布式计算系统中,如Hadoop、HBase等。它提供...
【标题】"zk-bin-prof-3.5.2"指的是ZK框架的3.5.2版本的二进制专业版。ZK是一款基于Java的开源用户界面框架,专门用于构建富互联网应用程序(RIA)。它提供了事件驱动、组件化的用户界面开发模型,支持多种Web浏览器...
这个压缩包包含了一个名为"zk-calendar-demo-1.0.0-RC"的项目,它是 wdCalendar 的一个实现,wdCalendar 是一个功能丰富的日历插件,特别适用于Web应用中的日程管理和事件安排。 ZK是一个开源的Java框架,它专注于...
zk-Gmaps-src-2.0_10.zip zk-Gmaps-src-2.0_10.zip
标题中的"zk-calendar-bin-1.0.0-RC.zip_zk calendar"表明这是一个关于"zk calendar"的软件包,版本号为1.0.0的Release Candidate(RC)。"zk calendar"可能是一个基于Zookeeper的日历管理或事件调度系统,而".zip...
ZK框架是一款用于Web开发的开源富客户端框架,它基于Java语言开发,并能够运行在服务器端。ZK框架允许开发者利用XUL(XML用户界面语言),通过简单的标记和脚本来创建复杂的Web界面。 首先,ZK框架的最新版本为...