DWR推送技术

“服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语。它是继“Ajax”之后又一个倍受追捧的Web技术。“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系。

随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大。Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失。

但是,在浏览器中的 Ajax应用中存在一个致命的缺陷无法满足传统桌面系统的需求。那就是“服务器发起的消息传递”(Server-Initiated Message Delivery)。在很多的应用当中,服务器软件需要向客户端主动发送消息或信息。因为服务器掌握着系统的主要资源,能够最先获得系统的状态变化和事件的发生。当这些变化发生的时候,服务器需要主动的向客户端实时的发送消息。例如股票的变化。在传统的桌面系统这种需求没有任何问题,因为客户端和服务器之间通常存在着持久的连接,这个连接可以双向传递各种数据。而基于HTTP协议的 Web应用却不行。

开始就简单介绍DWR技术的背景,下面来看下一个简单的Demo

附上简单的目录结构以及几个重要的代码:

MessagePush.java

package com.visec;
import java.util.Collection;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.proxy.dwr.Util;
import com.sun.org.apache.bcel.internal.generic.DADD;
import uk.ltd.getahead.dwr.WebContext;
import uk.ltd.getahead.dwr.WebContextFactory;
/**
 * MessagePush
 * @author Dana·Li
 */
@SuppressWarnings({ "unused", "deprecation" })
public class MessagePush{
    @SuppressWarnings("unchecked")
    public void send(String msg){
    WebContext webContext = WebContextFactory.get();
    String ip = webContext.getHttpServletRequest().getRemoteAddr().toString();//获取客户端IP
    String page = "/DwrInvoker/index.jsp";               //DWR为项目名称,页面为index.html
    Collection<ScriptSession> sessions = webContext.getScriptSessionsByPage(page);
    Util util = new Util(sessions);
    util.addFunctionCall("dwrtest", ip + ": " + msg);             //dwrtest为javascript函数
    }
}

当然这里有些会不理解,dwrtst的作用是干嘛的,dwrtest为Javascript函数,后面的Index.jsp中会提到

dwr.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
    "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
  <allow>
    <create creator="new" javascript="MessagePush">
        <param name="class" value="com.visec.MessagePush"></param>
    </create>
  </allow>
</dwr>
MessagePush的作用是映射生成javascrpt的脚本,即后续的index.jsp中调用的!

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name></display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>activeReverseAjaxEnabled</param-name>
            <param-value>TRUE</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>
</web-app>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>DwrInvoker</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/MessagePush.js"></script>
<script type="text/javascript">
    function dwrtest(data) {
        document.getElementById("area").innerHTML = document.getElementById("area").innerHTML+ "\n" + data;
    }
    function send(msg) {
        if (event.keyCode == 13) {
            MessagePush.send(msg);
        }
    }
</script>
</head>
<body >
    <textarea style="width: 800px; height: 600px;" id="area">
</textarea>
    <br />
    <input type="text" style="width: 800px;" id="in"
        onkeyup="send(this.value)" />
</body>
</html>

代码看到这里就可以上先是效果图了!这个图是简单的jpg图

本案例测试成功后用及时用到项目中:[可能是电脑原因GIF图制作的不怎么清晰,见谅....:)]

ping设备IP查看设备状态,看是否在线...DWR利用很广泛

DOS命令下 ping 192.168.4.10

然后转到项目中查看是否一致!

DWR的应用很广泛...类似的,我们抓取后台数据实现实时推送!

当然看到这里,很多IT同胞就会提出Ajax也可以实现,但是相对比较Ajax呢...

Ajax 轮询

Ajax隔一段时间(通常使用JavaScript的setTimeout函数)就去服务器查询是否有改变,从而进行增量式的更新。但是间隔多长时间去查询成了问题,因为性能和即时性造成了严重的反比关系。间隔太短,连续不断的请求会冲垮服务器,间隔太长,务器上的新数据就需要越多的时间才能到达客户机。

优点:

a) 不需要太多服务器端的配置。

b) 降低带宽的负荷(因为服务器返回的不是完整页面)。

时间: 2024-10-30 05:58:04

DWR推送技术的相关文章

Web端服务器推送技术原理分析及dwr框架简单的使用

1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系. 随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大.Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失. 但是,在浏览器中的 Ajax应用中存在一个致命的缺陷无法满足传统桌面系

Web端服务器推送技术原理分析及dwr框架简单的使用 转载

1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切的关系. 随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大.Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失. 但是,在浏览器中的 Ajax应用中存在一个致命的缺陷无法满足传统桌面系

网站推送技术总结

转自:http://blog.163.com/bailin_li/blog/static/17449017920124811524364/ 需求: 我想做个会员站内通知的功能.不想用以前的ajax查询,听说有个推技术.以下文章介绍的不错,来自转载, ================================================================================== PHP中Push(推送)技术的探讨  [http://vistaswx.com/bl

PHP ServerPush (推送) 技术

用来代替ajax的请求 转自:http://blog.163.com/bailin_li/blog/static/17449017920124811524364/ 需求: 我想做个会员站内通知的功能.不想用以前的ajax查询,听说有个推技术.以下文章介绍的不错,来自转载, ================================================================================== PHP中Push(推送)技术的探讨  [http://vis

Web端服务器推送技术原理分析

1 背景 "服务器推送技术"(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继"Ajax"之后又一个倍受追捧的Web技术."服务器推送技术"最近的流行跟"Ajax "有着密切的关系. 随着 Ajax技术的兴起,让广大开发人员又一次看到了使用浏览器来替代桌面应用的机会,并且这次机会非常大.Ajax将整个页面的刷新变成页面局部的刷新,并且数据的传送是以异步方式进行,这使得网络延迟带来的视觉差异将会消失.

物联网核心协议—消息推送技术演进

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网.本文阐述移动互联网消息推送技术在物联网中的应用和演进. 一.物联网架构和关键技术 从开发的角度,无线接入是物联网设备端的核心技术,身份设备管理和消息推送技术是物联网云端的核心技术.而从场景体验的角度,除了前者,还要包括手机的前端开发技术. 在上一篇<一张图读懂基于微信硬件平台的物联网架构>博文中,笔者曾用一张大图详细描述了基于微信硬件平台的物联网架构的组成要素.关键场景.和通信协议

Webserver推送技术

server推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为server主动发送信息.server发送一批数据,浏览器显示这些数据,同一时候保证与server的连接.当server须要再次发送一批数据时,浏览器显示数据并保持连接.以后,server仍然能够发送批量数据,浏览器继续显示数据,依次类推. client拉曳(Client Pull) 在client拖曳技术中,server发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器"在5秒内再次装入这些数据&

Python web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.

C(++) web实时消息服务器后台推送技术方案---GoEasy

Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快浏览器兼容性:GoEasy推送支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari 等等.支 持不同的开发语言:   GoEasy推送提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过RestfulAPI来实现后台实时推送.