首页 > 教程 > 关键词 > AJAX最新资讯 > 正文

AJAX模拟HTTP LongPoll 实现“服务器推”技术

2010-01-29 09:42 · 稿源:花太香齐的博客
Comet(彗星:某人给服务器推送技术起的名字)

核心图解:

最近在看“服务器推送技术”,在B/S结构中,通过某种magic使得客户端不需要通过轮询即可以得到服务端的最新信息(比如股票价格,聊天室,webQQ、开心网、白社会),这样可以节省大量的带宽。

传统的轮询技术对服务器的压力很大,并且造成带宽的极大浪费。如果改用ajax轮询,可以降低带宽的负荷(因为服务器返回的不是完整页面),但是对服务器的压力并不会有明显的减少。

而推技术(push)可以改善这种情况。但因为HTTP连接的特性(短暂,必须由客户端发起),使得推技术的实现比较困难,常见的做法是通过延长http连接的寿命,来实现push。

基本实现原理:

接下来自然该讨论如何延长http连接的寿命,最简单的自然是死循环法,如果使用观察者模式则可以进一步提高性能。

但是这种做法的缺点在于客户端请求了这个servlet后,web服务器会开启一个线程执行servlet的代码,而servlet由迟迟不肯结束,造成该线程也无法被释放。于是乎,一个客户端一个线程,当客户端数量增加时,服务器依然会承受很大的负担。

要从根本上改变这个现象比较复杂,目前的趋势是从web服务器内部入手,用nio(JDK 1.4提出的java.nio包)改写request/response的实现,再利用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非J2EE官方技术的服务器有Glassfish和Jetty。目前也有一些框架/工具可以帮助你实现推功能,比如pushlets。不过没有深入研究。还有就是通过设置超时来解决。

在客户和服务器之间保持“心跳”信息 —–无事件导致超时处理:

因为服务器为了保持请求(阻塞请求),必须有一个无限循环,循环的结束条件就是获取到了返回结果,如果客户端关闭了(客户端浏览器的关闭不会发消息给服务器),服务器无法知道客户端已经关了,这个请求没必要处理下去了,最终会造成资源过度浪费。还有服务器中间可能存在各式各样配置怪异的网关和代理,它们上面可能有各式各样的超时规则,因此Comet最好设计为定期重连。只要用一个折中的办法,限制超时时间。一般情况下,如果30秒没有任何事件发生,服务器端就应该通知客户端确实没有事件发生,结束掉本次请求,然后重新开始一次新的请求以便继续等待。这里可以不必设置客户端ajax的超时时间,但进行请求的时候传递一个超时值给服务器,服务器在处理的时候,如果超时时间到了的话,还没有客户端需要的结果,这时传递一个超时信息给客户端,客户端接收到了此信息,根据情况重新进行ajax请求,也就是进入下一个轮询……….当服务器处理信息出现异常情况,需要发送错误信息通知客户端,同时释放资源、关闭连接。

服务器端事件队列管理以及如何保持可靠的消息队列:

由于ajax的LongPoll是拉的方式(不同的客户端拉取的参数可以根据客户端不同而不同),服务器端根据客户选择的方式在读取事件队列(fetchEvents)时进行不同的处理,会把“heartbeat”与“refresh”事件一起传给客户端,通知客户端重新发出请求、建立连接。拉的同时也解决了发送目标的返回值。

在这里我们可以想象一个可能发生的情况,服务器端向你发送一个消息,你没有成功接收,但是服务器端认为发送了就成功了,消息从队列删除了,然后这个消息就永久丢失掉了。可能有人会强调TCP多么可靠,服务器端发送的消息如果在TCP的层面发生问题了,肯定会引发Socket级别的Exception,这个Exception冒泡上来,服务器端就能截获,从而得知发送失败,然后先不删除队首消息。可是别忘了,中间是可能存在代理的,如果代理成功把消息收回去了,可是代理发送到客户端这一步失败了,服务器端就不一定会发生异常了。

因此,我们需要制定一种策略,来确保下行消息总能发送到客户端。在这里,我们选择了引入逐个ACK的机制,来确认消息的接收。也就是说,服务器端发送给客户端的消息带有一个序号,在客户端收到消息后就将该序号发回给服务器端,已确认它受到了该消息。在下次请求时就将该序号加1的值通过sequence参数传递回去,让服务器知道我们期望下一条消息的编号是这个。例如我们收到Message,其Sequence属性为836,那么下一次调用的时候就传给服务器837。服务器端此时应该保留了编号为836的Message在对首,如果客户端继续请求836号消息,证明它上次没收到,这次仍然发送836号消息给它;如果客户端请求837号消息,证明它成功收到836号消息的,这次就发送837号消息给它。看到这里是不是感觉有点熟悉了,不错,这有点类似经典的TCP三握手原理。如果都不是,那该怎么办?那意味着,这是一个错误的请求,甚至可能是攻击请求,因为正常情况下不应该出现这样的请求的,服务器端可以考虑抛个无关紧要的Exception(不要告诉攻击者你知道他在攻击了),甚至直接给个400 (bad request)的响应代号。

网友热搜:

  • 相关推荐
  • 大家在看
  • HTTP和HTTPS是什么?

    我们都知道使用浏览器访问一个网站页面,需要知道该网站的域名,例如访问百度知道,在浏览器的地址栏中我们会看到一串URL。网站的URL会分为两部分:通信协议和域名地址。域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言。网站中的通信协议一般就是HTTP协议和HTTPS协议。两者分别是什么,有什么区别呢?HTTP协议HTTP协议也就是超文本传输协议,是一种使用明文数据?

  • 最强蜗牛服务器无响应详细解决办法 三种办法解决服务器无响应

    最强蜗牛经常的会碰到服务器无响应的情况,那么遇到这样的情况怎么办呢?下面就来为大家分享一下最强蜗牛服务器无响应详细解决办法。

  • 外媒:英伟达AMD服务器芯片销量正在增加

    【TechWeb】6月30日消息,据国外媒体报道,数据中心、云计算等领域的需求,也带动了服务器销量的增长,进而也拉升了服务器相关芯片销量的提升。外媒在最新的报道中就表示,英伟达、AMD这两大厂商服务器芯片的销量,正在增加,他们对未来也非常乐观。英伟达服务器相关芯片的业绩,在他们的财报中体现在数据中心这一业务上,这一业务2020财年的营收为29.83亿美元,在英伟达营收中所占的比重,由上一财年的25%提升到了27.4%。而在截?

  • 周杰伦新单曲《Mojito》导致QQ音乐服务器崩溃

    DoNews 6月12日消息(记者 刘文轩)今天凌晨,周杰伦最新单曲《Mojito》在QQ音乐、酷狗音乐、酷我音乐上线。上线后不久,QQ音乐服务器似乎开始出现崩溃的情况,有用户在QQ音乐官方微博下留言反馈了这一情况。从用户发布的截图可以看出,用户在付费购买这张单曲的时候,会被提示“购买过程中由于网络异常导致失败,系统未扣费,请尝试重新购买”。这并不是周杰伦第一次把QQ音乐搞到崩溃,早在去年9月,周杰伦的单曲《说好不哭》上线

  • 2个月构建一个Go服务器,他通过众筹获得14万元

    Kaya.gs是使用Go语言构建的一个服务器,它的创始人Gabriel Benmergui仅用 2 个月的时间就完成该产品的构建及启动,并在随后几个月的时间内容通过众筹活动筹集了 2 万美元。然而,投入运行 1 年后,Kaya.gs就被迫关闭了。

  • 感天动地却终究没法感动你!买199台服务器也没能让一个土豪脱单

    从前有一个年轻的土豪,他喜欢看直播,看美女,大学没读完就在家天天刷DOUYIN,家里怕他出去调皮。。这一天,他突然觉得无聊了,觉得这样每天打赏下去,就算不会坐吃山空,也会要么被主播害死,要么被老爸打死。于是他想做点什么正经事情了。他想多认识年轻漂亮的女孩,他渴望交友,于是他想做个交友的APP。比如MOMO这样的。做个APP,需要办执照,注册公司,办ICP,等等。他找来了平时的酒肉朋友,朋友告他除了办这些证照外,还需?

  • 一键部署K8S持久化存储,Rancher正式发布Longhorn 1.0

    2020年6月3日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布企业级云原生容器存储解决方案Longhorn正式GA。Longhorn支持企业在Kubernetes上轻松开发有状态的应用程序,满足了企业对避免供应商锁定的企业级持久化存储解决方案的需求。Kubernetes正迅速成为现代应用程序基础架构的基础。据IDC预测,到2022年,将有70%的企业跨多个平台部署统一的虚拟机、Kubernetes、多云管理流程和工具。随着越?

  • 全职保姆也没这么贴心,ColorOS 「AI 应用预启动」无微不至

    当下手机俨然已经成为人们手掌的延伸,在生活各处发挥着作用,如通讯、钱包、社交等,而各大手机系统也相继研发了各种AI加成的系统功能,让系统变得更懂人心。在 6 月 5 日OPPO Reno4 系列发布会上,ColorOS 7. 2 带来了让手机更快、更懂你的「AI应用预启动」功能,使手机应用实现秒速启动,下面就让我们一起来了解一下。「AI 应用预启动」通过创建 AI 学习模型,时刻记录、学习受用的手机使用习惯,并在相应的时间段预先启动这些?

  • 猿辅导招聘服务器端研发工程师(JAVA)诚邀技术大拿

    猿辅导是一家在线教育领域的互联网公司,众所周知互联网公司最重要的岗位非程序员莫属,猿辅导也不例外,近日猿辅导招聘服务器端研发工程师(JAVA)正如火如荼的进行着。猿辅导可以为工程师们提供舒适的工作环境以便大家可以大显身手。猿辅导望京办公楼猿辅导的这份工作主要内容是负责猿辅导主app相关产品服务器端的开发,而且作为一名有经验的研发工程师,你还需要指导新人进行开发。猿辅导的办公环境对于这个岗位,猿辅导有相应?

  • 华为发布新一代智能服务器,携手英特尔加速智能计算前行

    今天,华为在深圳发布了新一代FusionServer Pro V6 智能服务器,首款推出FusionServer Pro 2488H V6 四路机架服务器。相比上一代FusionServer Pro V5 搭配的第二代英特尔?至强?可扩展处理器,新一代FusionServer Pro V6 搭配了第三代英特尔?至强?可扩展处理器,并支持最新英特尔?傲腾?持久内存。 自 2019 年华为将FusionServer服务器全面升级为FusionServer Pro智能服务器以来,该产品线已连续推出两代新品,华为一直紧跟英特尔技

  • 美看Mcomb电动牙刷,“刷出来的真香”!

    科技改变生活,生活逐渐智能化、电动化。电动牙刷,早已不是什么新鲜事物,几年前,它还是高科技的代表,价格一直高高在上。而如今,网上也出现了不少物美价廉的国产品牌,不仅颜值高、价格可、口碑也很在线。比如,今天要介绍的这个网红品牌——美看Mcomb,这款不到300元的电动牙刷,到底香不香呢?1、外在有颜:粉色机身尽显时尚美看M2是一款颜值很高的声波电动牙刷,有专情灰和恋爱粉两种配色,这组CP真的是高级感十足。机身上?

  • 如何打造5G时代下的系统生态?ColorOS 7.2给了答案

    如今要入手一台新机,需要考虑的因素着实不少。除了硬件方面的「老三样」性能、影像、屏幕,软件层面的优化以及实际操作体验也同样被人看重。而随着5G时代的到来,操作系统上需要配套打造的内容也在不断增多,如何与5G带来的新问题相匹配,就成了厂商们需要思考的问题。而最近在OPPO发布的新机OPPO Reno4 系列上,一起到来的还有全新的ColorOS 7. 2 系统。既然是诞生在5G背景下的新系统,ColorOS 7. 2 又能给我们带来什么样的表现?

  • ColorOS 7.2潮玩功能汇总,上手根本停不下来

    OPPO Reno4 系列在 6 月 5 日正式发布,作为一台主打影像以及续航的新机,OPPO Reno4 系列已经「堆料满满」。不过OPPO似乎还不满足于此,在软件层面上,OPPO 全新系统小版本ColorOS 7. 2 还为OPPO Reno4 系列带来不少有趣的玩法。(OPPO Reno4 系列发布会上ColorOS 7. 2 带来不少潮玩功能)本次OPPO Reno4 系列搭载的ColorOS 7. 2 带来了OPPO 创新产品探索平台与用户共创社区——OPPO LAB。通过OPPO LAB,OPPO可以及时将新功能与服

  • 底层优化+ AI 能力,ColorOS 7.2让你的OPPO手机更流畅

    2019 年 11 月 20 日,「轻快无边界」的 ColorOS 7 正式发布。围绕「快」,ColorOS 7 除了带来系统底层优化,同时加入诸多效率操作,让 ColorOS 7 体验更畅快。2020 年 6 月 5 日,ColorOS 7.2 随 OPPO Reno4 系列一同发布,该版本在拥有原本的「轻快」体验之外,还带来全新的「AI 应用预启动」功能,大幅提升应用启动效率,帮助用户快人一步,决胜于毫秒之间。AI 自主学习,越用越懂你ColorOS 7.2 内置 AI 模型,能自主学习用户在

  • 全面屏时代的贴心优化,ColorOS 7 这几点值得了解

    从手机发展历程看,能显示更多内容的大屏受到用户的喜爱,甚至有不少声音表示大屏用过就回不去了,所以现如今各家都在控制手机尺寸的情况下,想尽办法提升屏占比,为用户带来更大的屏幕。但大屏除了带来更强视觉冲击和内容,让人机交互也迎来了新的挑战。如何帮助用户最有效率地利用手机大屏成了厂商们关注的问题。其中 ColorOS 给出的解决方案就非常具有参考意义,推荐手持 OPPO 手机的用户尝试。浮窗气泡习惯于在手机上看视频的?

  • 制造商消息人士:云服务器需求未来一年半依旧强劲

    6月3日消息,据国外媒体报道,智能手机等诸多产品及服务的出货量和市场需求都受到了影响,但笔记本电脑、处理器、在线教育、云计算等产品和服务的需求,却有一定程度的提升。外媒最新的报道显示,云服务器也是需求有增长的一个领域,需求依旧强劲,未来一段时间的出货量也将高速增长。外媒是援引服务器制造领域消息人士透露的消息,报道云服务器需求强劲、出货辆将高速增长的。这一服务器制造领域的消息人士表示,云服

  • COMPUTEX 2020线下展览取消

    DoNews 6月12日消息(记者 刘文轩)台北国际电脑展COMPUTEX & InnoVEX 2020特展原本打算缩减规模并延期到今年9月举行。不过遗憾的是,主办方今天正式宣布完全取消今年的展览活动,并预告明年6月1日到6月5日再见。虽然通过线上举行的分享活动在过去一星期顺利举办,然而全球依然笼罩在新馆肺炎疫情的阴影下,各国采取相应的防疫措施和出入境限制,这些措施也导致一些参展商难以顺利抵达台湾参展,这也导致原本打算9月举办的特展不得

  • 更快更懂你的 AI 应用预启动,ColorOS让你快人一步

    不少人可能会觉得安卓手机打开应用的速度没有苹果手机快,以前确实是这样的,不过由于安卓系统这几年的进步非常大,再加上手机厂商会针对国内用户使用习惯进行深度优化,所以在手机的流畅性上,现在的安卓手机其实已经不逊色于苹果手机了,特别是 OPPO手机系统 ColorOS 7.2 新增的 AI 预启动功能,进一步提升了手机应用的启动速度,几乎达到了秒开应用的效果,非常值得一试。从知名评测机构@小白测评的测试结果来看,在进行 20 款?

  • 充得快,用得慢!ColorOS 7.2 全场景解决你的续航焦虑

    进入 2020 年以来,智能手机市场迎来了 5G 手机的大面积爆发,国内一线手机厂商几乎都推出了 5G 手机,并且针对 5G 手机的续航问题也是煞费苦心,在硬件和软件上做了不少的优化。不过要说手机系统层面优化十分用心的,OPPO 手机系统ColorOS 7 可以说是其中之一,其在此前推出的 Smart 5G 智能调度就广受用户好评。(ColorOS 7 Smart 5G 智能调度)就在 6 月 5 日 OPPO Reno4 系列的发布会上,ColorOS 7 也迎来了新的系统小版本升级

  • 浪潮发布了两款M6系列四路服务器,支持最新的第三代Intel Xeon可扩展处理器

    [TechWeb]全球领先的IT基础架构提供商浪潮(Inspur)发布了两款M6系列四路服务器,支持最新的第三代Intel Xeon可扩展处理器,其中包括针对云方案进行了优化的2U四路服务器NF8260M6和四路4U四路服务器NF8480M6。传统企业客户的关键任务应用场景的服务器。第三代Intel Xeon可扩展处理器支持四路和八路服务器,单个CPU最多可支持28个内核。主流CPU首次支持Bfloat16数字格式,以增强AI深度学习性能和计算速度。同时,在云计算,内存数

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议