• 长轮询的几个关键过程

    一次长轮询的步骤
    服务器君一共花费 36.141 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    所谓长连接(不是指HTTP keep alive),就是要在客户端与服务器之间创建和保持稳定可靠的连接。其实它是一种很早就存在的技术,但是由于浏览器技术的发展比较缓慢,没有为这种机制的实现提供很好的支持。所以要达到这种效果,需要客户端和服务器的程序共同配合来完成。通常的做法是,在服务器的程序中加入一个死循环,在循环中监测数据的变动。当发现新数据时,立即将其输出给浏览器并断开连接,浏览器在收到数据后,再次发起请求以进入下一个周期,这就是常说的长轮询(long-polling)方式。

    如下图所示,它通常包含以下几个关键过程:

    1. 轮询的建立

    建立轮询的过程很简单,浏览器发起请求后进入循环等待状态,此时由于服务器还未做出应答,所以HTTP也一直处于连接状态中。

    2. 数据的推送

    在循环过程中,服务器程序对数据变动进行监控,如发现更新,将该信息输出给浏览器,随即断开连接,完成应答过程,实现“服务器推”。

    3. 轮询的终止

    轮询可能在以下3种情况时终止:

    • 有新数据推送:当循环过程中服务器向浏览器推送信息后,应该主动结束程序运行从而让连接断开,这样浏览器才能及时收到数据。 
    • 没有新数据推送:循环不能一直持续下去,应该设定一个最长时限,避免WEB服务器超时(Timeout),若一直没有新信息,服务器应主动向浏览器发送本次轮询无新信息的正常响应,并断开连接,这也被称为“心跳”信息。 
    • 网络故障或异常:由于网络故障等因素造成的请求超时或出错也可能导致轮询的意外中断,此时浏览器将收到错误信息。 

    4. 轮询的重建

    浏览器收到回复并进行相应处理后,应马上重新发起请求,开始一个新的轮询周期。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  2. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  3. [PHP程序设计] 对输入文件类型的检测 1 个条目
  4. [数据结构] 散列表(哈希表) 13 个条目
  5. [PHP程序设计] PHP里的引用 5 个条目
  6. [移动开发] 从代码角度去认识 Thread 9 个条目
  7. [软件工程与项目管理] 了解一点WebKit 9 个条目
  8. [JavaScript程序设计] jQuery与表单操作 2 个条目
  9. [C语言程序设计] C语言里的全局变量 2 个条目
  10. [Python程序设计] 从PHP到Python 3 个条目
  11. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  12. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
窗口 -- [八点]