ajax长轮询 java web_浅谈Websocket、Ajax轮询和长轮询(long polling)
浅谈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)相关推荐
- ajax感受,有什么缺点,浅谈ajax的优点与缺点
AJAX (Asynchronous Javascript and XML) 是一种交互式动态web应用开发技术,该技术能提供富用户体验. 完全的AJAX应用给人以桌面应用的感觉.正如其他任何技术,A ...
- 解耦 多态性 java_Java的多态浅谈,Java多态浅谈网站安全分享!
Java的多态浅谈概述Java的四大基本特性:抽象,封装,继承和多态.其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现.如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的 ...
- 【Java】浅谈关于代码的耦合性
[Java]浅谈关于代码的耦合性 前言 一.需求 二.简单的实现 1.资源代码(项目提供) 2.对需求的普通实现 三.利用业务与逻辑分离的方式实现 改进 四.对需求改进后的同步项目改进(优点) 总结 ...
- java学习方法-浅谈软件开发的神速进步
中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败". 1浅谈软件开发的神速进步 1.1什么才是软件开发的葵花 ...
- java easing_浅谈jQuery animate easing的具体使用方法(推荐)
从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...
- HTTP协议浅谈(一)之TCP长连接
之前的认识 刚接触HTTP请求就听说过HTTP请求有1.0和1.1两个版本(其实还有个0.9版本,因为只接受GET一种请求,不支持POST方法,因此客户端无法向服务器传递太多信息而为人们所忽略),而且 ...
- ajax长轮询 java web_网页实时聊天之js和jQuery实现ajax长轮询
众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...
- java web怎么实现踢人_【Java】浅谈踢人下线的设计思路!(附代码实现方案)
前言 前两天写了一篇文章,主要讲了下java中如何实现踢人下线,原文链接:java中如何踢人下线?封禁某个账号后使其会话立即掉线! 本来只是简单阐述一下踢人下线的业务场景和实现方案,没想到引出那么多大 ...
- 【java】浅谈注释
java中的注释可以分为三大类:行注释.块注释以及文档注释 行注释: 基本语法: //注释的内容 产生 效果:该行//之后的内容就都被注释了 块注释: 基本语法: /* 注释内容 */ 注:块注释禁止 ...
最新文章
- Java如何优雅的实现时间控制
- Android系统中设置TextView等的行间距
- linux下导入、导出mysql数据库命令 下载文件到本地
- VTK:可视化算法之MarchingCases
- 几个必知的python小知识
- js-cookie 无法设置cookie_php操作 cookie
- linux外接显示屏,关掉本身的笔记本电脑
- 10 条提升 Android 性能的建议
- Android 系统(230)---OTA 软件包工具
- 基于 SpringMvc + OpenCV 实现的答题卡识别系统(附源码)
- 机器学习——Day 1 数据预处理
- cordova android项目自定义插件及使用(二)
- linux设置自动清除内存碎片
- MyEclipse简介
- 当贝F5和坚果J10S色彩实拍对比,终究是徕卡错付了
- LLaMA模型文件 (搬运工)
- Recursive function
- excel熵值法计算权重_熵值法的Excel基本步骤
- 离线安装ffmpeg
- 小米3升级android 6.0,手机如何升级MIUI 6.0系统?miui升级图文教程
热门文章
- 安卓手机如何投屏到电视上_安卓手机的屏幕怎么投屏在电视大屏幕上
- css英文文本转化属性的是,css文本属性_CSS教程_郭隆邦技术博客
- HttpURLConnection发送post请求
- 《Linux系统调用:sigsuspend,sigwaitinfo,sigtimedwait》
- windows11无法拖动文件的现象解决方案/QQ文件拖动方法
- 经典软件测试面试题,不知道回答迟早被拒绝
- bim综合免费插件:Revit中运用报告参数的方法
- 发邮件 iphone
- 浏览器的垃圾回收及内存泄漏的情况
- 06 SpringBoot企业实战多环境切换之Profile