




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HTTP长连接服务器端推技术服务器推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。 客户端拉曳(Client Pull) 在客户端拖曳技术中,服务器发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器“在5秒内再次装入这些数据”或“10秒内前往某URL装入数据”。当指定的时间达到时,客户端就按照服务器的指示去做,或者刷新当前数据,或者调入新的数据。 其实push 和 pull 这两种技术手段非常不同,但目的几乎一致,都是为了给最终用户方便的提供最新信息。 在服务器推送技术中,HTTP 连接一直保持着,直到服务器知道自己已结束发送数据并发送一个结束信号,或者客户端中断连接。而在客户端拖曳技术中,并不保持HTTP连接,相反,客户端被告知合时建立新连接,以及建立连接是获取什么数据。 在服务器推送中,奇妙之处在于“multipart/mixed”格式的MIME,它能够使一个报文(或HTTP响应)包含许多数据项、在客户端拖曳中,奇妙之处在于HTTP响应头标(或等效的HTML元素),它能告知客户端在指定的延时时间后执行何种动作。 服务器推送通常效率要比客户端拖曳效率高,因为它不必为后续数据建立新的连接。由于始终保持连接,即使没有数据传输时也是这样,因此服务器必须愿意分配这些TCP/IP端口,对于TCP/IP端口数有限的服务器这将是一个严重的问题。 客户端拖曳效率低,因为这必须每次为传送数据建立新的连接。但是它不必始终保持连接。 在实际情况中,建立HTTP连接通常需要花费相当多的时间,多达一秒甚至更多。因此从性能上考虑,服务器推送对于最终用户更有吸引力,特别是对于需要经常更新信息的情况下。 服 务器推送相对客户端拖曳的另一点优势是,服务器推送相对比较容易控制。例如,服务器每一次推送时都保持一个连接,但它又随时可以关闭其中的任何连接,而不 需要在服务器上设置特殊的算法。而客户端拖曳在同样的情况下要麻烦许多,它每次要与服务器建立连接,服务器为了处理将客户端拖曳请求与特定的最终用户匹配 等情况,需要使用相当麻烦的算法。 如果实现服务器推送的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 echo HTTP/1.1 200 echo Content-type: multipart/x-mixed-replace;boundary=-ThisRandomString- echo echo -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 而下例则不能正常工作,因为它在中间有空格: Content-type: multipart/x-mixed-replace; boundary=ThisRandomString 服务器推送的另一个优点是它可以针对单个内联图象进行。包括图象的文档可以由服务器定时或定周期进行更新。而实现这一点非常简单:只需使IMG元素的SRC属性指向推送一系列图象的URL即可。 如果服务器推送用于单个内联图象,文档中的图象就会一次次被新推送来的图象所代替,而文档本身不需变化(假设文档没有进行服务器推送)。这样,WEB页面中有限的动画就可以为静态画面所代替。 客户端拖曳 客户端拖曳的一个简单用法是使文档按固定周期自动重载。例如,考虑下面的HTML文档: Document ONE This is Document ONE! Heres some text. 如果将它载入支持动态文档的浏览器(Netscape 1.1以上,Internet Explorer和Mosaic也支持客户端拖曳),它将每隔一秒将自己重载一次。 由于META元素实际是在HTML文档中模拟HTTP响应头标,所以它能够告知浏览器将自身信息当作HTTP响应使用。上例中的META标记相当于: Refresh:1 这样,实际上就是HTTP头标告知浏览器每一秒更新一次文档。如果需要延时是12秒,那么就是这样的指令: 那么它等效于: Refresh:12 关于客户端的拖曳我也懒的继续写下去,关于怎么使客户端自动申请其他URL的数据话,请使用如下: 注意的是,此处的URL不能使用相对路径,必须全部指定。 其中时间间隔可以设置为0,这样浏览器在当前文档显示完毕后,以最快的速度载入新的数据!Moon1发表于2008年11月21日 10:54:46IP:所 有的客户端都是连接到服务器的webserver端口,比如80, 这个根本和服务器的端口数无关. 是个错误的提法. 文章链接:/21aspnet/archive/2008/11/20/3341805.aspx 发表时间:2008年11月21日 10:54:46举报multipart/mixed头一次看到这个,研究下。不过文中 : 因此服务器必须愿意分配这些TCP/IP端口,对于TCP/IP端口数有限的服务器这将是一个严重的问题。所有的客户端都是连接到服务器的webserver端口,比如80, 这个根本和服务器的端口数无关. 是个错误的提法. wzd24发表于2008年11月21日 15:01:47IP:举报美丽的馅饼。IE同时只会打开两个连接来请求数据。如果你使用服务端推送技术的话,连接将被占用而导致其他资源无法被请求。singyea发表于2008年11月21日 21:02:17IP:举报推?简直疯了,让一个一个保持连接不断开,不知道要耗多少资源撒?kingwei1977发表于2008年11月22日 1:48:57IP:举报楼主方法太好了。to:Moon1每次客户端都是连接到服务器,服务器会分配个socket出来处理本次请求,它是要占断口的。to:wzd24E同时只会打开两个连接来请求数据?不知道从哪儿来的说法?to:singyea让一个一个保持连接不断开,应该不是问题,至于耗多少资源,那是你代码的问题你们都不太懂啊,还是楼主强,用multipart.,我怎么没想到呢。saighost发表于2008年11月22日 22:04:12IP:举报GlassFish已经支持Comet了,比这种做法会更好!krisky发表于2008年11月23日 11:25:33IP:举报楼 主,我不知道你思考这个推的问题时,所看问题的角度是什么,但我认为你对通信技术本身的设计原则不太了解 如果服务器去推送哪服务器如何知道用户的下一个动作是什么如果用户的下一个请求要跳转到其它服务器上你如何实现,在这种情况下,是不是通过客 户端主动去访问其它服务器这样比较容易,如果这样的话我为什么不使用客户端主动服务器被动响应的方式,而要用你的什么推的方式了.有时在 思考问题的时候。要全面一点.xxfun发表于2008年11月24日 1:16:32IP:举报楼主的文章太好了。非常谢谢!同时也支持kingwei1977。to krisky,推的本意是自动更新状态,而不是用在用户主动请求的情况,要好好理解楼主的意思。比如在线页面聊天,你怎么知道对方什么时候发来信息呢。服务器“推”就可以解决这个问题了。wzd24发表于2008年11月24日 9:01:04IP:举报TO:kingwei1977 这是HTTP规范决定的,详细的你可以去BAIDU和Google搜索。这个服务器“推”技术很早以前就有人研究了,我在2000年的时候就有人发表这样的文章了,但结论是:不实用。呵呵wzd24发表于2008年11月24日 9:03:06IP:举报2000年的时候看到关于“推”技术的文章。不是我写的。呵呵我那时还没这样的能耐。richer_dong发表于2008年11月24日 14:53:49IP:举报微软的MVP真的越来越烂了,如果这片文章不是LZ写的,希望能加以下评论。如果是LZ写的,那么希望LZ研究下通讯技术后,再来涂鸦。服务器推技术的根本问题是,当客户端建立Socket套接字后,服务器需要对该套接字进行输出。如果客户端Shutdown,服务端也需要至少发送一次请求,每次请求至少1个调度周期。换句话说,如果该技术放在90年,因为网络客户端有局限性该技术还能被用。但现今社会是机器都能上网,哪个服务不被全球M多台机器访问,如果用推技术,估计(不计TCP资源)服务器的周期需要10分钟以上。另外如果计TCP资源,需要直接面临服务器的端口数限制。又一个快餐式程序员. .gho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省福州第四中学2026届高一化学第一学期期末复习检测模拟试题含解析
- 桥梁专业知识培训课件
- 2026届河北省巨鹿中学高一化学第一学期期末监测模拟试题含解析
- 2025年机关事务管理面试宝典门诊部岗位面试模拟题及解析
- 2025年徐州市中考生物试题卷(含答案及解析)
- 2025江苏高校大学《辅导员》招聘考试题库及答案
- 2025年初级摄影课程学员面试题
- 2025年度注册验船师资格考试船舶检验法律法规考前冲刺模拟题及答案(网页版)
- 2025年验船师考试(C级船舶检验专业实务)考前模拟试题及答案二
- 北京市门头沟区2024-2025学年八年级上学期第二次月考生物考试题目及答案
- 蛇咬伤急救处理流程
- 陕西省特种设备隐患排查清单(2025年)
- 货款转让协议书
- 2025年内蒙古鄂尔多斯一中高考生物倒计时模拟卷含解析
- 2025CACA子宫颈癌诊疗指南解读
- 绿色建筑概论 课件全套 第1-11章 绿色建筑概述-绿色建筑运营与维护
- 2025医务人员手卫生规范
- 医务人员行为规范
- 光伏电站安全培训
- GB/T 35267.4-2025清洗消毒器第4部分:内镜清洗消毒器
- DB45T 1056-2014 土地整治工程 第2部分:质量检验与评定规程
评论
0/150
提交评论