服务器推送通常效率要比客户端拖曳效率高,因为它不必为后续数据建立新的连接。由于始终保持连接,即使没有数据传输时也是这样,因此服务器必须愿意分配这些TCP/IP端口,对于TCP/IP端口数有限的服务器这将是一个严重的问题。
客户端拖曳效率低,因为这必须每次为传送数据建立新的连接。但是它不必始终保持连接。
   
    在实际情况中,建立HTTP连接通常需要花费相当多的时间,多达一秒甚至更多。因此从性能上考虑,服务器推送对于最终用户更有吸引力,特别是对于需要经常更新信息的情况下。
   
    服务器推送相对客户端拖曳的另一点优势是,服务器推送相对比较容易控制。例如,服务器每一次推送时都保持一个连接,但它又随时可以关闭其中的任何连接,而不需要在服务器上设置特殊的算法。而客户端拖曳在同样的情况下要麻烦许多,它每次要与服务器建立连接,服务器为了处理将客户端拖曳请求与特定的最终用户匹配等情况,需要使用相当麻烦的算法。更多http://www.cnblogs.com/yeilsoiaisn/
    
    如果实现服务器推送的CGI程序是使用Shell脚本语言编写的,有时会存在一些问题。例如,客户端最终用户中断连接,Shell程序通常不能注意到,这将使资源毫无用处的浪费掉,解决这一问题的办法是用Perl或者C来编写这类CGI程序,以使用户中断连接时能够结束运行。
   
    如上所述,在服务器推送中,多个响应中连接始终保持,使服务器可在任何时间发送更多的数据。一个明显的好处是服务器完全能够控制更新数据的时间和频率。另外,这种方法效率高,因为始终保持连接。缺点是保持连接状态会浪费服务器端的资源。服务器推送还比较容易中断。
   
    接下来就大概说说服务器推送技术
   
    服务器在响应请求时,HTTP使用MIME报文格式来封装数据。通常一个HTTP响应只能包含一个数据块。但MIME有一种机制可用一个报文(或HTTP响应)表示将多个数据块,这种机制就是成为"multipart/mixed"的标准MIME类型。multipart/mixed报文大体格式如下:
   
    Content-type:multipart/mixed;boundary=ThisRandomString
   
    --ThisRandomString
   
    Content-type:text/plain
   
    第一个对象的数据。
   
    --ThisRandomString
   
    Content-type:text/plain
   
    第二个对象的数据。
   
    --ThisRandomString--
   
    上述报文包括两上数据块,二者的类型都是"text/plain".最后一个"ThisRandomString"后的两条短线(--)表示报文结束,后面没有数据。
   
    对于服务器推送,使用一个"multipart/mixed"类型的变种--multipart/x-mixed-replace.这里,"x-"表示属于实验类型。"replace"表示每一个新数据块都会代替前一个数据块。也就是说,新数据不是附加到旧数据之后,而是替代它。
   
    下面是实际使用的"multipart/x-mixed-replace"类型:
   
    Content-type:multipart/x-mixed-replace;boundary=ThisRandomString
   
    --ThisRandomString
   
    Content-type:text/plain
   
    第一个对象的数据
   
    --ThisRandomString
   
    Content-type:text/plain
   
    第二个(最后一个)对象的数据。
   
    --ThisRandomString--
   
    使用这一技术的关键是,服务器并不是推送整个"multipart/x-mixed-replace"报文,而是每次发送后数据块。
   
    HTTP连接始终保持,因而服务器可以按自己需要的速度和频率推送新数据,两个数据块之间浏览器仅需在当前窗口等候,用户甚至可以到其他窗口做别的事情,当服务器需要发送新数据时,它只是源(ABC输入法没那个字*&^$#)传输管道发送数据块,客户端相应的窗口进行自我更新。
在服务器推送技术中,"multipart/x-mixed-replace"类型的报文由唯一的边界线组成,这些边界线分割每个数据块。每个数据块都有自己的头标,因而能够指定对象相关的内容类型和其他信息。由于"multipart/x-mixed-replace"的特性是每一新数据块取代前一数据对象,因而浏览器中总是显示最新的数据对象。
   
    "multipart/x-mixed-replace"报文没有结尾。也就是说,服务器可以永远保持连接,并发送所需的数据。如果用户不再在浏览器窗口中显示数据流,或者浏览器到服务器间的连接中间(例如用户按"STOP"按钮),服务器的推送才会中断。这是人们使用服务器推送的典型方式。
   
    当浏览器发现"Content-type"头标或到达头标结束处时,浏览器窗口中的前一个文档被清除,并开始显示下一个文档。发现下一个报文边界时,就认为当前数据块(文档)已经结束。
   
    总之,服务器推送的数据由一组头标(通常包括"Content-type")、数据本身和分割符(报文边界)三部分组成。浏览器看到分割符时,它保持状态不变,直到下一个数据块到达。
   
    将以上概念进行用编程方法实现,就可以得到实际的服务器推送程序。例如,下面的Unix shell程序将使浏览器每5秒显示一次服务器上的进程列表:
   
    #!/bin/sh
   
    Eecho "HTTP/1.1 200"
   
    cecho "Content-type: multipart/x-mixed-replace;boundary=--ThisRandomString--"
   
    echo ""
   
    oecho "--ThisRandomString--"
   
    while true
   
    do
   
    echo "Content-type: text/html"
   
    echo ""
   
    echo "h2Processes on this machine updated every 5 seconds/h2"
   
    echo "time:"
   
    date
   
    echo "p"
   
    echo "plaintext"
   
    ps -el
   
    echo "--ThisRandomString--"
   
    sleep 5
   
    done
   
    注意到,边界设置在sleep语句之前发送,这能够确保浏览器清除其缓冲区,并显示所接收到的最新数据。
   
    NCSA HTTPD用户在内容类型中不能使用空格,包括边界参数。NCSA HTTPD只能将不带空格字符的字符串作为内容类型。如果在内容类型行中存在空格(冒号后面的空格除外),空格后的任何文本都会被删除。 下面的示例是正确的:
   
    Content-type: multipart/x-mixed-replace;boundary=ThisRandomString
   
    而下例则不能正常工作,因为它在中间有空格:
   
    -type: multipart/x-mixed-replace; boundary=ThisRandomString
   
    服务器推送的另一个优点是它可以针对单个内联图象进行。包括图象的文档可以由服务器定时或定周期进行更新。而实现这一点非常简单:只需使IMG元素的SRC属性指向推送一系列图象的URL即可。 如果服务器推送用于单个内联图象,文档中的图象就会一次次被新推送来的图象所代替,而文档本身不需变化(假设文档没有进行服务器推送)。这样,WEB页面中有限的动画就可以为静态画面所代替。
   
    客户端拖曳
   
    客户端拖曳的一个简单用法是使文档按固定周期自动重载。例如,考虑下面的HTML文档:
   
    <META HTTP-EQUIV="Refresh" CONTENT=1>
   
    <TITLE>Document ONE</TITLE>
   
    <H1>This is Document ONE!</H1>
   
    Here's some text.<P>
   
    如果将它载入支持动态文档的浏览器(Netscape 1.1以上,Internet Explorer和Mosaic也支持客户端拖曳),它将每隔一秒将自己重载一次。
   
    由于META元素实际是在HTML文档中模拟HTTP响应头标,所以它能够告知浏览器将自身信息当作HTTP响应使用。上例中的META标记相当于:
   
    Refresh:1
   
    这样,实际上就是HTTP头标告知浏览器每一秒更新一次文档。如果需要延时是12秒,那么就是这样的指令:
   
    <META HTTP-RQUIV="Refresh" CONTENT=12>
   
    那么它等效于:Refresh:12
   
    关于客户端的拖曳我也懒的继续写下去,关于怎么使客户端自动申请其他URL的数据话,请使用如下:
   
    <META HTTP-EQUIV="Refre
sh" CONTENT="12;URL=http://icools.yeah.net/">
   
    注意的是,此处的URL不能使用相对路径,必须全部指定。
    其中时间间隔可以设置为0,这样浏览器在当前文档显示完毕后,以最快的速度载入新的数据!

转载于:https://blog.51cto.com/jaiaiifh/939482

对于asp.net服务器推送和客户端拉拽技术知识讲述相关推荐

  1. 服务器推送之HTTP Mime multipart/x-mixed-replace

    1. 关于服务器推送 服务器推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息.服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接.当服务器需要 ...

  2. 服务器推送技术Server Push详解

    服务器推送技术(Server Push)是最近Web技术中最热门的一个流行术语,它的别名叫Comet(彗星).它是继AJAX之后又一个倍受追捧的Web技术.服务器推送技术最近的流行与AJAX有着密切的 ...

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

    转载:http://blog.csdn.net/shimiso/article/details/8151362 1 背景 "服务器推送技术"(ServerPushing)是最近We ...

  4. 1.认识服务器推送技术

    最近需要使用服务器端往前台推送消息 ,所以查阅了相关资料 转载于:http://blog.csdn.net/zamaolangzi/article/details/7238688 仁兄的一篇文章, 服 ...

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

    1        背景 "服务器推送技术"( ServerPushing)是最近 Web技术中最热门的一个流行术语.它是继" Ajax "之后又一个倍受追捧的  ...

  6. 服务器推送信息到客户端,服务器如何发送消息到客户端

    服务器如何发送消息到客户端 内容精选 换一换 使用SSH方式登录CentOS 6.5操作系统的弹性云服务器时,过一段时间就会自动断开连接.本节操作介绍如何保持SSH会话持续连接不断开该文档适用于Cen ...

  7. ASP.NET Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEa ...

  8. Comet服务器推送与SignalR

    HTTP协议是一个典型的Request/Response协议,是基于TCP/IP之上的一个应用层协议,该协议最典型的特点就是无状态且需要客户端发起Request服务端才能进行Response,这意味着 ...

  9. 服务器推送技术的研究与应用

    3.1服务器推送技术(Server Push) 3.1.1服务器推送技术概述 服 务器推送技术是最近Web技术中最热门的一个流行术语,它是继AJAX之后又一个倍受追捧的Web技术.我们可以认为AJAX ...

最新文章

  1. python代码编辑器排行榜-写 Python 哪个编辑器 / IDE 最好用?
  2. python四十五:归一化继承
  3. 领域设计基本理论知识总结(转)
  4. JavaScript 对引擎、运行时、调用堆栈的概述理解
  5. C#实验报告 类与对象的访问性:银行账户存取款、新建账户、查询余额
  6. java里的关键字有什么用_java语言关键字有哪些?都有什么用处?
  7. PX4的workqueue
  8. 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列表白名单设置方法
  9. 传统反病毒软件厂商学会新把戏
  10. POST方式提交乱码解决
  11. SQL SERVER全局变量
  12. android之module删除不干净
  13. Asp.net中模仿Winform的MessageBox
  14. WebService
  15. 如何直观理解粒子滤波并进行Python编程实践
  16. ios12越狱自签需要联网_从越狱的iOS切换到Android? 这是你需要知道的
  17. 什么是企业用户画像,怎么构建企业用户画像
  18. Qt 可拖拽 大小可调 方框
  19. 在安卓项目中使用gifsicle编辑GIF动图-Android NDK 编译 gifsicle 为可执行文件记录
  20. python最简单的爬取邮箱地址_python3爬取网页中的邮箱地址

热门文章

  1. mysql三高讲解(二)2.9: mysql示例数据库sakia database的使用
  2. streamsets添加mysql驱动_StreamSets3.9.1安装说明
  3. ajax弹出提示框,Ajax环境下弹出提示框
  4. linux写入系统状态到文件夹,实验二 Linux系统简单文件操作命令
  5. TCL微型计算机如何投屏,TCL电视怎么投屏?3个办法帮助你完美解决
  6. python sys.path
  7. javascript Exception handling statements(异常处理)
  8. Linux tmux
  9. Pandas 基本文本数据处理
  10. linux中检测用户信息的命令是,Linux中系统状态检测命令