2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近想在产品中加入即时通讯的功能.BS架构的程序.实现方式不外乎两大标准下的各种奇淫技巧.

这两大标准就是 HTML5 HTML4

为啥这两个呢..因为HTML5里面有websocket.这个彻底颠覆http请求的东西,使得请求不再是无状态的.

当然websocket目前支持不是很好.也没办法.看着好东西没法用.这是一种何种的煎熬....搞得我总是想在产品里面内嵌chromeFrame.然后强制给客户装上.哈哈...当然客户没准会和我拼命呢...

没办法,在现有的需求中基本上,实现思路只有一个了.也就是第一个让我头疼了一阵的关键词

"轮询"

这词看上去很高级的样子,其实就是写个ajax间隔一段时间不断向服务器请求内容.这活谁都干过.

然后我就想啊.如果用轮询实现,那也显得太低级了吧.怎么着.咱得弄个高级点的技巧显摆显摆..于是,查了一番资料,一个更加装逼的词语蹦到了偶的眼前

"长轮询"

看,变长了果然不一样了.这个词还伴随着一个英文

"comet"

其实原理很简单.以往的web请求,服务器处理请求后要立即返回,尽管超时的时间也能到达30秒这么多(并不是说用了comet才可以允许连接在服务器等待,我也可以让连接在服务器端sleep).但是连接只能存在于本次请求中.无法保持住.而comet允许连接请求过来后被保持住(保存起来,如session里面).当我需要的时候,读出来再返回给客户端数据.所以这种情况的所谓的"长"长在了服务器端.

长轮询比轮询的好处在于,如果像是即时通讯,聊天室一类的应用,轮询并不能保证每次查阅服务器一定有数据需要返回,所以会造成很多没用的请求到达服务器.而长轮询因为连接保持在了服务器,需要的时候激活就可以.所以就省去了很多没用的请求.

长轮询适合那些数据反映需要及时,但是数据量不大的场景.比如站内消息.其实聊天室不是多么适合.因为人多的时候.长轮询和轮询没啥区别.所以,对于服务器与浏览器交互密集型的实时场景.长轮询并不能减少多余的请求.

长轮询使用ajax实现浏览器响应.其实也可以使用隐藏的iframe来做.毕竟那个奇葩的IE是我们不得不兼容的.

用iframe 模拟ajax请求的这种 叫做 "iframe streaming"

对于交互密集型实时场景.还有没有办法优化.还真有.

对于 Servlet3 的 AsynContext 关闭有两种情况.一种是正常的complete.另一种就是dispatch.

complete很容易理解.完成后.浏览器继续请求一次.这叫长连接.

如果不complete.而dispatch到自身.数据会返回到客户端.但是连接并不需要再次请求.dispatch后的请求仍然可以继续返回到客户端.

所以这种请求方式只需要客户端发起一次请求就可以了.

但是.好事多磨.对于前台来说.由于连接被dispatch.ajax会报错.(据说FF还是op.允许ajax继续处理请求,我试验的chrome,报错了,如果谁成功了,一定告诉我.)

但是.我们可以使用隐藏的iframe来接收这些请求.就可以正常使用了.当然.浏览器的加载按钮会一直转啊转啊..

我个人比较喜欢dispatch这种方式.奇淫技巧很唬人啊.适合忽悠刚入职的小朋友们哈哈..

转载于:https://my.oschina.net/jsmagic/blog/125456

comet 异步请求技术中相关关键字解释 (新手向)相关推荐

  1. HTTP请求头中各字段解释

    Accept : 浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如 Accept: text/plain Accept-Charset:浏览器能识别的字 ...

  2. HTML5前端入门教程:Ajax 异步请求技术

    AJAX的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). ✦ajax不是新的编程语言,而是一种使用现有标准的新方法.ajax是与服务 ...

  3. IP定位领域中相关名词解释

    1.数据挖掘 数据挖掘是指从大量的数据中通过算法搜索隐藏于其中信息的过程,系统中的数据挖掘是指利用计算机技术对基准点.IP开源信息.IP应用场景等IP相关数据的采集.过滤和分析处理,对IP的属性进行探 ...

  4. OkHttpClient源码分析(一)—— 同步、异步请求分析和Dispatcher的任务调度

    OkHttpClient同步请求的执行流程和源码分析 同步请求示例 OkHttpClient okHttpClient = new OkHttpClient.Builder().readTimeout ...

  5. 人生最好的php,mysql,linux,redis,docker等相关技术经典面试题,新手收藏学习,持续更新中。。。

    php面试题 1.写出你能想到的所有HTTP返回状态值,并说明用途(比如:返回404表示找不到页面) # 200:服务器请求成功 # 301:永久重定向,旧网页已被新网页永久替代 # 302:表示临时 ...

  6. 【Unity】Unity中的异步编程技术详解

    异步编程技术对于很多手游开发者来说,都是不可避免的话题,因为手游的游戏逻辑包含太多需要并发或者希望能够并行的逻辑.现在的手机硬件发展迅速,多核已成为主导趋势,对于3A级大作来说,如何充分利用手机多核的 ...

  7. js:如何在循环异步请求的每次返回中添加想要的值

    先看一个场景 var arr = ["a","b","c"]; for (var i in arr) { $.get("h.htm ...

  8. React开发中使用fetch进行异步请求

    React开发中使用fetch进行异步请求 最新的Web API接口中提供了一个全局fetch方法,从而以一种更为简单.合理的方式来支持跨网络异步获取资源. 这种功能以前是使用 XMLHttpRequ ...

  9. Http中的同步请求和异步请求

    最近在上springmvc的JSON数据交换的时候,老师下课提了一个课后问题:什么是异步请求?什么是同步请求?我想大部分同学听到这个问题的时候应该和我一样不知所云.现在,给大家分享一篇关于同步请求和异 ...

最新文章

  1. SCALA当的trait
  2. 1057 Stack
  3. 关于最佳线程数的计算的准确理解
  4. USACO翻译:USACO 2014 FEB SILVER 三题
  5. 正确关闭WCF代理对象
  6. Android Studio无线连接设备调试,比数据线更方便
  7. JimuReport积木报表1.3.3 版本发布,可视化报表工具
  8. JSP自定义标签详解(1)
  9. 让你30分钟快速掌握vue 3
  10. span标签居中显示的正确方法
  11. MIUI 12 的方向走错了吗?
  12. 数据库原理与应用 基于SQL Server 2005pdf
  13. 市民云注销账号实名认证还有吗_这可能是全网最详细的注销网易服务的教程了...
  14. PHP后台数据处理及与web端进行数据交互
  15. [吴恩达机器学习课程笔记] week four强化学习
  16. easyUI-疯狂的秀才
  17. 运维大佬嘲笑我,这个你都不知道?
  18. 10-STM32F1-RTC and BKP
  19. 前端重要的H标签详解(干货!)最新版
  20. Word里面文字怎么修改字体

热门文章

  1. 浅谈Git的基本工作流程与简单的Git命令
  2. windows安装pycocotools错误:cl : Command line error D8021 : invalid numeric argument '/Wno-cpp'
  3. GIS+=地理信息+容器技术(4)——Docker执行
  4. C#设计模式(3)——工厂方法模式
  5. poj3421 X-factor Chains
  6. ava method org.apache.struts2.components.Form.getValidators(String) threw an exception when invoke
  7. android MotionEvent中getX()和getRawX()的区别
  8. [C#]最简单的Base64加密解密
  9. sudo密码一直出错
  10. 百度ueditor编辑器注入漏洞修补查杀程序