浅谈Websocket、Ajax轮询和长轮询(long p0ll)

最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下。

1.什么是Websocket

Websocket是HTML5中提出的新的协议,注意,这里是协议,可以实现客户端与服务器端的通信,实现服务器的推送功能。

2.Websocket和HTTP协议是什么关系

简单来说,Websocket和HTTP有关系,但是关系不大,它们的关系类似于数学中的交集,如下图(借用的Ovear的图)。Websocket借用了HTTP协议来完成一部分握手过程。

3.Websocket的握手过程

当客户端要建立Websocket连接时,其向服务器发送:

GET /chat HTTP/1.1

Host: xxx.com

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

Origin: http://xxx.com

其中,Upgrade: websocket和Connection: Upgrade告诉服务器,我要建立的是websocket连接;Sec-WebSocket-Key部分服务器加密后还要返回浏览器,确保建立的是websocket连接;Sec-WebSocket-Version: 13是websocket的版本号。

当服务器接收到上述包后,会返回一下内容:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Sec-WebSocket-Protocol: chat

它告诉客户端,我已经切换到websocket协议了,Sec-WebSocket-Accept就是Sec-WebSocket-Key加密后的内容,这样,一个websocket连接就建立了。

4.Websocket怎么工作的

客户端:我要建立websocket连接

服务器端:好的,已经切换到websocket协议,websocket连接已经建立

客户端:有什么消息要及时告诉(推送)我

服务器端:好的

服务器端:xxxxxx

服务器端:yyyyyyy

。。。。。

其优点就是,只要建立一次连接,就可以连续不断的得到服务器推送的消息,节省带宽和服务器端的压力。

5.Ajax轮询怎么实现的

其实,这个大多数小伙伴都知道了,ajax轮询模拟长连接就是每个一段时间(0.5s)就向服务器发起ajax请求,查询服务器端是否有数据更新

客户端:有没有新消息

服务器端:没有。。

客户端:有没有新消息

服务器端:有,xxxxx

客户端:有没有新消息

服务器端:没有。。

客户端:有没有新消息

服务器端:没有。。

。。。。。。

其缺点显而易见,每次都要建立HTTP连接,即使需要传输的数据非常少,所以这样很浪费带宽;同时,这个过程是被动性的,即不是服务器主动推送的。

6.长轮询(long poll)

客户端:有没有新信息(Request)

服务端:没有,

(时间一直的流逝。。。,当等待到有消息的时候)

服务器端:给你xxxx(Response)

客户端:有没有新消息(Request)

。。。。。

其缺点也是显而易见的,同ajax轮询一样,也是每次都要建立HTTP连接,也都是被动的。而且这种方法对服务器的并行要求比较大,因为在没有消息的时候,连接照样保持,而这时需要其它信息是又要建立新的连接(就连接保持中)。

7.参考:

a.百度

b.http://www.zhihu.com/question/20215561/answer/40316953

ajax长轮询 java web_浅谈Websocket、Ajax轮询和长轮询(long polling)相关推荐

  1. ajax感受,有什么缺点,浅谈ajax的优点与缺点

    AJAX (Asynchronous Javascript and XML) 是一种交互式动态web应用开发技术,该技术能提供富用户体验. 完全的AJAX应用给人以桌面应用的感觉.正如其他任何技术,A ...

  2. 解耦 多态性 java_Java的多态浅谈,Java多态浅谈网站安全分享!

    Java的多态浅谈概述Java的四大基本特性:抽象,封装,继承和多态.其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现.如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的 ...

  3. 【Java】浅谈关于代码的耦合性

    [Java]浅谈关于代码的耦合性 前言 一.需求 二.简单的实现 1.资源代码(项目提供) 2.对需求的普通实现 三.利用业务与逻辑分离的方式实现 改进 四.对需求改进后的同步项目改进(优点) 总结 ...

  4. java学习方法-浅谈软件开发的神速进步

    中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败". 1浅谈软件开发的神速进步 1.1什么才是软件开发的葵花 ...

  5. java easing_浅谈jQuery animate easing的具体使用方法(推荐)

    从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...

  6. HTTP协议浅谈(一)之TCP长连接

    之前的认识 刚接触HTTP请求就听说过HTTP请求有1.0和1.1两个版本(其实还有个0.9版本,因为只接受GET一种请求,不支持POST方法,因此客户端无法向服务器传递太多信息而为人们所忽略),而且 ...

  7. ajax长轮询 java web_网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  8. java web怎么实现踢人_【Java】浅谈踢人下线的设计思路!(附代码实现方案)

    前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大 ...

  9. 【java】浅谈注释

    java中的注释可以分为三大类:行注释.块注释以及文档注释 行注释: 基本语法: //注释的内容 产生 效果:该行//之后的内容就都被注释了 块注释: 基本语法: /* 注释内容 */ 注:块注释禁止 ...

最新文章

  1. Java如何优雅的实现时间控制
  2. Android系统中设置TextView等的行间距
  3. linux下导入、导出mysql数据库命令 下载文件到本地
  4. VTK:可视化算法之MarchingCases
  5. 几个必知的python小知识
  6. js-cookie 无法设置cookie_php操作 cookie
  7. linux外接显示屏,关掉本身的笔记本电脑
  8. 10 条提升 Android 性能的建议
  9. Android 系统(230)---OTA 软件包工具
  10. 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)
  11. 机器学习——Day 1 数据预处理
  12. cordova android项目自定义插件及使用(二)
  13. linux设置自动清除内存碎片
  14. MyEclipse简介
  15. 当贝F5和坚果J10S色彩实拍对比,终究是徕卡错付了
  16. LLaMA模型文件 (搬运工)
  17. Recursive function
  18. excel熵值法计算权重_熵值法的Excel基本步骤
  19. 离线安装ffmpeg
  20. 小米3升级android 6.0,手机如何升级MIUI 6.0系统?miui升级图文教程

热门文章

  1. 安卓手机如何投屏到电视上_安卓手机的屏幕怎么投屏在电视大屏幕上
  2. css英文文本转化属性的是,css文本属性_CSS教程_郭隆邦技术博客
  3. HttpURLConnection发送post请求
  4. 《Linux系统调用:sigsuspend,sigwaitinfo,sigtimedwait》
  5. windows11无法拖动文件的现象解决方案/QQ文件拖动方法
  6. 经典软件测试面试题,不知道回答迟早被拒绝
  7. bim综合免费插件:Revit中运用报告参数的方法
  8. 发邮件 iphone
  9. 浏览器的垃圾回收及内存泄漏的情况
  10. 06 SpringBoot企业实战多环境切换之Profile