当一个服务器被用来查询/控制客户端浏览器行为时就用到 Reverse AJAX 术语。这可能会导致一些疑问,因为这听起来在我们浏览世界上的web页面时我们的浏览器就会受到攻击。
幸运的是,不会这样,因为不可能一个服务器可以打开一个到浏览器的连接。浏览器才是连接的发起者。
DWR 支持 3 种方法来实现 Reverse AJAX:Piggyback、Polling(by the client)以及Comet(server push)。
1、Piggyback
当服务器有更新需要发送给客户端时,它就会等待客户端打开一个连接从服务器获取数据。客户端的DWR就会意识到更新,并在用户的web页面上做出相应的更新。
Piggyback 是 DWR 中 Reverse AJAX 的默认方法,它被叫做 被动Reverse AJAX(其他的叫 主动 Reverse AJAX),且不需要任何配置。
Piggyback 的一个缺点就是 服务端的更新不能够及时地被用户看到。对于有些应用来说这不是个问题,但如果确实是个问题,那就选刚才说的其他2个方法呗,Polling 或 Comet。
使用 Reverse AJAX,要求服务端的应用代码用到一些 DWR 类。DWR 有一个类叫 ScriptProxy 负责在客户端执行 JavaScript 函数。下面的代码片段是在从某个远程java方法中摘取的,它获取一个指定页面叫manpage.jsp 的所有 script sessions,之后添加了一个函数调用,这个函数调用会在服务器所知道的所有客户端上被调用,然后 mainpage.jsp 就被打开了。
Collection<ScriptSession> sessions = serverContext.getScriptSessionsBy
Page(contextPath + "/mainpage.jsp");
ScriptProxy proxy = new ScriptProxy(sessions);
proxy.addFunctionCall("newMessage",newMessage);
在 manpage.jsp 中,有一个叫 newMessage 的函数,它会更新页面上的一些字段。
function newMessage(newMessageParam) {
elementToBeUpdated=document.getElementById("messageArea");
elementToBeUpdated.innerHTML=newMessageParam;
}
2、Polling
Polling 就是一个 “没有脑子” 的实现 Reverse AJAX 的办法,它真的不是 reverse,因为DWR会周期性地轮询服务器。
这种方式在一些情形中是适用的,特别是当对网络以及服务器的额外负载觉得不是个问题时或者对数据的更新实时性要求不高时。
当用 Polling 方式来实现 Reverse AJAX 时,代码和前面的 Piggyback 章节是一样的。只是要修改一下配置。为了使用 Polling,就要向 web.xml 中的 DWR servlet 添加一个 init 参数:
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
还要在 web 页面中添加下面的这行代码。这个 web 页面用于接收来自服务器的 Reverse AJAX 请求。
dwr.engine.setActiveReverseAjax(true);
上面的配置实际上就是 Comet 方法所需要做的所有配置了。对于 Polling 方法,还需要一个额外的 init 参数。
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param- name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
还有一个可选的参数用于设定 poll interval,默认是5秒。
<init-param>
<param-name>disconnectedTime</param-name>
<param-value>60000</param-value>
</init-param>
3、Comet
Comet,对于一些人来说,也叫 long-live HTTP,是一个比较新的术语,就是用于 server push,浏览器会打开一个连接,这个连接会保持开着的状态,这样当需要的时候,服务器就可以推送更新给浏览器,延迟就非常低。
使用 Comet 的 Active Reverse AJAX 有 2 种模式: Full Streaming Mode( DWR 2.0.3 以及早期版本默认就是这个),以及 Early Closing Mode(DWR 2.0.4 以及后续版本默认就是这个)
Full Streaming Mode 拥有最快的响应时间,几乎就是实时响应,当一个事件在服务器上发生时。在该模式下,每 60 秒,DWR 就会检查 浏览器是否是活跃的。另一方面,Early Cloing Mode 会导致 DWR 关闭连接,当浏览器接收到输出,之后会重新打开它。对于 Early Closing Mode,有一个 init 参数叫 maxWaitAfterWrite 它的值是毫秒,在接收到服务器的输入后并等待这个秒数后就会关闭连接,然后会重新打开它。
在 DWR 应用中使用 Comet 有2个问题应当要考虑一下,特别是当一个应用拥有大量用户时。因为客户端保持着到服务器的连接,很可能服务器资源就会被连接和它们的线程所消耗殆尽。解决方案就是将 maxWaitAfterWrite 这个 init 参数调整到一个合理值。其他的解决方案就是用 Polling 或 Passive Reverse AJAX。
在所有的这3个方法中,DWR 显示出了它的强项,因为我们都不需要去知道 Reverse Ajax 的实现细节。
相关推荐
蓝桥杯嵌入式十五届模拟1代码
该数据集收录了2007-2022年中国各省份绿色税收相关数据,涵盖总税收、资源税、环境保护税、城市维护建设税、城镇土地使用税、车船税、耕地占用税、消费税、车辆购置税等指标。绿色税收是以保护环境、合理开发利用自然资源为目的,对特定行为或产品征收的税费,旨在通过经济手段引导企业减排降污,促进资源合理利用和可持续发展。数据包含全国31个省级行政区的年度统计,其中环境保护税自2018年开征后,与资源税等共同构成绿色税收体系,通过"多排多征、少排少征"机制推动企业环保改造。部分数据存在缺失值,但整体可直接用于区域绿色税制比较、环境政策效果评估等研究。
该资源为joblib-0.9.0b4.tar.gz,欢迎下载使用哦!
Android开发根据标签外框颜色决定字体颜色以及选中后的背景色,这样颜色不同,好看,有点难度,关键在于如何自定义控件
blue_concrete_powder
Android开发仿抖音底部加载进度条效果,中间往外走的进度条,关键是自定义View
【3D文件】硬件开发之3D文件打印,3D生成器,咸蛋超人3D打印文件,5款不同的3D文件免费下载,总有一款适合你,光之铸型:咸蛋超人3D觉醒计划 资源图片查看链接:https://blog.csdn.net/weixin_60324241/article/details/147260889?spm=1011.2415.3001.5331
j
基于Springboot框架实现的学生选课管理系统,包含一种角色:管理员,系统分为前台登录和后台两大模块,主要功能如下。 【前台登录】: 1. 学生登录:学生可以通过学号和密码登录系统,查看自己的选课情况、成绩等信息。 2. 教师登录:教师可以通过工号和密码登录系统,查看自己的教授课程、学生评价等信息。 【后台模块】: 1. 选课管理:管理员可以管理课程信息,包括添加、编辑、删除课程信息,设置课程容量,调整课程时间表等。 2. 教评管理:管理员可以管理学生对教师的评价,包括查看评价结果、编辑评价内容等。 3. 教评问题管理:管理员可以管理教评中的问题,包括添加、编辑、删除问题,设置问题选项等。 4. 校建管理:管理员可以管理校园建筑信息,包括添加、编辑、删除校建信息,查看校园地图等。 5. 教师管理:管理员可以管理教师信息,包括添加、编辑、删除教师信息,查看教师评价等。 6. 学生管理:管理员可以管理学生信息,包括添加、编辑、删除学生信息,查看学生选课情况等。 7. 课程管理:管理员可以管理课程信息,包括添加、编辑、删除课程信息,查看课程详情等。 8. 成绩管理:管理员可以管理学生成绩,包括录入、编辑、删除成绩,查看学生成绩单等。 9. 校园新闻:管理员可以发布校园新闻,包括添加、编辑、删除新闻,查看新闻详情等。 10. 系统管理:管理员可以管理系统的用户账号和权限,包括添加、编辑、删除用户,设置用户权限等。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:HTML、Jquery、CSS、JavaScript、 后端技术:Spring、SpringMVC、MyBatis 三、运行环境 操作系统:Windows或者macOS JDK版本:最好是JDK1.8,其他版本理论上也可以 开发工具:IDEA、Ecplise
WINDOWS系统读取苹果分区的利器,支持HFS+及APFS分区。
1.通过提取docx需求文档有效标题的正文内容、表格及图片OCR结果,结合动态生成的提示词进行功能测试用例生成; 2.通过提取excel、yml或json格式的接口文档,结合提示词生成接口测试用例; 3.用例以json形式预览,支持导出为md、excel、json等格式; 4.安装部署简单,只需python环境即可,安装依赖库后即可运行; 5.需替换脚本里的api-key,模型调用阿里云百炼deepseek-r1的接口;
数据集介绍: 数据集包含五种美食图片,每种美食类型图片为1000张。
内容概要:本文详细介绍了LiteOS这一轻量级物联网操作系统,涵盖其特点、应用场景、开发环境搭建、内核机制、实战演练及进阶学习。LiteOS由华为开发,专为资源受限设备设计,具备轻量级、高效性、安全性和开放性等特点,适用于智能家居、工业自动化、智能穿戴和智能城市建设等领域。文章逐步讲解了Windows和Linux系统下搭建LiteOS开发环境的具体步骤,包括安装交叉编译器、HiSpark Studio、配置Python环境、下载并配置LiteOS SDK等。深入探讨了LiteOS内核的任务管理和内存管理机制,并通过Hello World程序展示了创建任务、编写代码、编译和烧录的完整流程。最后,介绍了SAL及socket编程,提供了丰富的学习资源,包括官方文档、技术论坛和开源代码库。 适合人群:具备一定编程基础,尤其是对物联网开发感兴趣的开发者,以及希望深入了解嵌入式操作系统原理的技术人员。 使用场景及目标:①学习如何在资源受限的设备上开发高效稳定的应用程序;②掌握LiteOS的任务管理、内存管理等核心机制;③通过实战演练和进阶学习,提高物联网设备的网络通信能力,如使用SAL及socket编程实现设备与服务器之间的TCP通信。 其他说明:本文不仅提供了理论知识,还结合具体代码示例和实际操作步骤,帮助读者更好地理解和应用LiteOS。物联网技术正处于快速发展阶段,掌握LiteOS开发技能将为开发者在智能家居、工业自动化、智能穿戴等领域提供强大的竞争力。
j
有轨装车机机行走机构设计分析.rar
该资源为h5py-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl,欢迎下载使用哦!
black_stained_glass
macOS剪辑三剑客Final Cut Pro 11.1附下载
酸奶厂总平面设计图.rar
Windows系统下读取Apple硬盘分区的软件,支持HFS+及APFS分区。