zoukankan      html  css  js  c++  java
  • web服务器推送技术

    传统模式的 Web 系统以客户端发出请求、服务器端响应的方式工作。不能满足很多现实应用的需求,譬如:

    监控系统:后台硬件温度、电压发生变化;
    即时通信系统:其它用户登录、发送信息;
    即时报价系统:后台数据库内容发生变化;
    即时信息系统:微博、说说实时推送

    目前主流的是采取如下几种方式来实现以上需求:
    
    Ajax轮询:异步响应机制,即通过不间断的客户端 Ajax 请求,去发现服务端的变化。这种方式由于是客户端主动连接的,所以会有一定程度的延时,并且服务器的压力也不小。
    
    长轮询:原理是客户端发出一个http长连接请求,然后等待服务器的响应,服务器接到请求之后,并不立即发送出数据,而是hold住这个Connecton。这个处理是非阻塞的,所以服务器可以继续处理其他请求。在某个时刻,比如服务器有新数据了,服务器再主动把这个消息推送出去,即通过之前建立好的连接将数据推送给客户端。客户端收到返回。这个时候就可以处理数据,然后再次发起新的长连接。服务器压力一般,实时性很高。Servlet 3.0开始已经支持该技术。sina微博就是使用的原生Servlet 3实现的消息推送。
    
    套接字:可以利用 Flash 的 XMLSocket 类或者 Java 的 Applet 来建立 Socket 连接,实现全双工的服务器推送,然后通过 Flash 或者Applet 与 JavaScript 通信的接口来实现最终的数据推送。但是这种方式需要 Flash 或者 JVM 的支持,同样不太合适于终端用户。
    
    HTML5的WebSocket:这种方式其实与套接字一样,但是这里需要单独强调一下:它是不需要用户而外安装任何插件的。HTML5 提供了一个 WebSocket 的 JavaScript 接口,可以直接与服务端建立Socket 连接,实现全双工通信,这种方式的服务器推送就是完全意义上的服务器推送了,没有半点模拟的成分,只是现阶段支持 HTML5 的浏览器并不多,而且一般老版本的各种浏览器基本都不支持。不过 HTML5 是一套非常好的标准,在将来,当HTML5 流行起来以后将是我们实现服务器推送技术的不二选择。
    Ajax轮训压力大,套接字不适用,HTML5目前支持不大多,这样看来长轮询是我们的必然之选。 可是使用 servlet 3 实现自己要做的事很多。没有有什么可供选择的框架呢?当然是有了,如下:
    

    1、Cometd

    http://cometd.org/

    基于Bayeux协议实现,支持长轮询、WebSocket等..
    

    2、Pushlet

    http://www.pushlets.com/

    基于HTTP流的JSP/Semlet技术实现
    

    3、Atmosphere

    http://atmosphere.java.net/

    4、DWR

    http://directwebremoting.org/dwr/index.html

        据我的了解,使用最多的应该是 DWR 和 Cometd了,其中Cometd功能强大使用又简单。我参与的一个项目中使用Cometd 做前台地图上人员轨迹的实时推送,几百个人员的实时轨迹推送都是没问题的。用。Cometd前台有2个实现版本 Jquery 和 Dojo,也可以用JS但是会复杂点。(PS Cometd 官方文档相当使用,遇到问题就读一遍,肯定能找到你想要的。 http://docs.cometd.org/reference/)
  • 相关阅读:
    Luogu_P3435 [POI2006]OKR-Periods of Words KMP
    NOIP2019游记
    []記錄容易出錯的地方和一些知識
    [题解]luogu_P3939_数颜色(vector二分
    [题解]luogu_P4819_杀人游戏(缩点
    [题解]NOIP2018_赛道修建(二分/树形dp/set/贪心
    [题解]luogu_P4161_(排列/lcm
    [题解]luogu_P4886_快递员(点分治
    [题解]luogu_P3523(树上覆盖
    [题解]luogu_P2466(区间dp
  • 原文地址:https://www.cnblogs.com/rysinal/p/6438627.html
Copyright © 2011-2022 走看看