websocket和http区别

websocket和http区别目录一 什么是 websocket 二 websocket 的原理三 websocket 与 http 的关系四 websocket 解决的问题 1 http 存在的问题 2 longpoll 长轮询 3 Ajax 轮询 4 websocket 的改进推送延迟 服务端数据发生变更后 长轮询结束 立刻返回响应给客户端 服务端压力 长轮询的间隔期一般很长 例如 30s 60s 并且服务端 hold 住连接不会消耗太多服务端资源 推送延迟 服务端压力 配置一般不会发生变化 频繁的轮询会给服务端造成很大的压力 推送延迟和服务端压力无法中和

目录

一,什么是websocket

二,websocket的原理

三,websocket与http的关系

四,websocket解决的问题

1.http存在的问题

2.long poll(长轮询)

3.Ajax轮询

4.websocket的改进


一,什么是websocket

  • WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
  • 它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
  • Websocket是一个持久化的协议

二,websocket的原理

  1. websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
  2. 在websocket出现之前,web交互一般是基于http协议的短连接或者长连接
  3. websocket是一种全新的协议,不属于http无状态协议,协议名为”ws”

三,websocket与http的关系

websocket和http区别

 相同点:

  1. 都是基于tcp的,都是可靠性传输协议
  2. 都是应用层协议

不同点:

  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息
  2. HTTP是单向的
  3. WebSocket是需要浏览器和服务器握手进行建立连接的
  4. 而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接

 联系:

  • WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的

总结(总体过程):

  1. 首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
  2. 然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
  3. 最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。

四,websocket解决的问题

1.http存在的问题

  • http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端是谁,需要每次知道对方是谁,才进行相应的响应,因此本身对于实时通讯就是一种极大的障碍
  • http协议采用一次请求,一次响应,每次请求和响应就携带有大量的header头,对于实时通讯来说,解析请求头也是需要一定的时间,因此,效率也更低下
  • 最重要的是,需要客户端主动发,服务端被动发,也就是一次请求,一次响应,不能实现主动发送

2.long poll(长轮询)

  • 对于以上情况就出现了http解决的第一个方法——长轮询
  • 基于http的特性,简单点说,就是客户端发起长轮询,如果服务端的数据没有发生变更,会 hold 住请求,直到服务端的数据发生变化,或者等待一定时间超时才会返回。返回后,客户端又会立即再次发起下一次长轮询
  • 优点是解决了http不能实时更新的弊端,因为这个时间很短,发起请求即处理请求返回响应,实现了“伪·长连接”
  • 张三取快递的例子,张三今天一定要取到快递,他就一直站在快递点,等待快递一到,立马取走

 从例子上来看有个问题:

  1. 假如有好多人一起在快递站等快递,那么这个地方是否足够大,(抽象解释:需要有很高的并发,同时有很多请求等待在这里)
  • 总的来看:
  • 推送延迟。服务端数据发生变更后,长轮询结束,立刻返回响应给客户端。
  • 服务端压力。长轮询的间隔期一般很长,例如 30s、60s,并且服务端 hold 住连接不会消耗太多服务端资源。

3.Ajax轮询

  • 基于http的特性,简单点说,就是规定每隔一段时间就由客户端发起一次请求,查询有没有新消息,如果有,就返回,如果没有等待相同的时间间隔再次询问
  • 优点是解决了http不能实时更新的弊端,因为这个时间很短,发起请求即处理请求返回响应,把这个过程放大n倍,本质上还是request = response
  • 举个形象的例子(假设张三今天有个快递快到了,但是张三忍耐不住,就每隔十分钟给快递员或者快递站打电话,询问快递到了没,每次快递员就说还没到,等到下午张三的快递到了,but,快递员不知道哪个电话是张三的,(可不是只有张三打电话,还有李四,王五),所以只能等张三打电话,才能通知他,你的快递到了)

 从例子上来看有两个问题:

  1. 假如说,张三打电话的时间间隔为10分钟,当他收到快递前最后一次打电话,快递员说没到,他刚挂掉电话,快递入库了(就是到了),那么等下一次时间到了,张三打电话知道快递到了,那么这样的通讯算不算实时通讯?很显然,不算,中间有十分钟的时间差,还不算给快递员打电话的等待时间(抽象的解释:每次request的请求时间间隔等同于十分钟,请求解析相当于等待)
  2. 假如说张三所在的小区每天要收很多快递,每个人都采取主动给快递员打电话的方式,那么快递员需要以多快的速度接到,其他人打电话占线也是问题(抽象解释:请求过多,服务端响应也会变慢)
  • 总的来看,Ajax轮询存在的问题:
  1. 推送延迟。
  2. 服务端压力。配置一般不会发生变化,频繁的轮询会给服务端造成很大的压力。
  3. 推送延迟和服务端压力无法中和。降低轮询的间隔,延迟降低,压力增加;增加轮询的间隔,压力降低,延迟增高

4.websocket的改进

一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端中断连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实现了“真·长链接”,实时性优势明显。

websocket和http区别

 

WebSocket有以下特点:

  • 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
  • HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)

转载自:https://blog.csdn.net/_/article/details/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199694.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:25
下一篇 2026年3月20日 下午12:26


相关推荐

  • App界面原型设计工具「建议收藏」

    App界面原型设计工具「建议收藏」首先,一款优秀的移动APP界面原型设计工具应该具备:  ①.支持移动端演示(随时随地演示给BOSS,厕所&食堂&电梯…以体现我是那么的敬业——长点工资必备)  ②.组件库(高效复用,谁用谁知道)  ③.可以快速生成全局流程(程序猿看不懂拆解的,给丫的看这个)  ④.在线协作(多个PM狗一起用)  ⑤.手势操作、转场动画、交互特效…(这些都不需要,留给专业的交互、视觉,

    2022年6月16日
    36
  • ORACLE 11G DATA GUARD配置之Dataguard基本原理

    ORACLE 11G DATA GUARD配置之Dataguard基本原理1 DATAGUARD 原理 DATAGUARD 是通过建立一个 PRIMARY 和 STANDBY 组来确立其参照关系 STANDBY 一旦创建 DATAGUARD 就会通过将主数据库 PRIMARY 的 REDO 传递给 STANDBY 数据库 然后在 STANDBY 中应用 REDO 实现数据库的同步 有两种类型的 STANDBY 物理 STANDBY 和逻辑 STANDBY 物理 STANDBY 提供与主数据库完全一样的拷贝 块到

    2026年3月19日
    2
  • 检测Chrome headless的技巧

    检测Chrome headless的技巧原文链接 https antoinevaste com bot 20detection 2018 01 17 detect chrome headless v2 html 更新 我创建了一个库 可以通过浏览器指纹来检测脚本和爬虫 这个库仍然在开发过程中 不过你可以开始尝试使用了 代码已经在 Github 上了 目前 我在测试一个新的检测方法 欢迎来进行挑战 并给出反馈 之前我写了一个博

    2026年3月17日
    2
  • 微信开发工具-命令行的使用

    微信开发工具-命令行的使用F ProgramFiles x86 Tencent 微信 web 开发者工具 gt cli bat 上传 F ProgramFiles x86 Tencent 微信 web 开发者工具 gt cliuploadpro svnUI ui commerce plusMemberMi trunk distversion0 0 0 0 2 8desc

    2026年3月18日
    2
  • 家谱树-树的利用

    家谱树-树的利用include include include include defineMAXSIZ intNum 记录这个人的子女数 charname 20 姓名 structTreeNo NextNode MAXSIZE 1 记录儿女结点 structTreeNo parent

    2026年3月18日
    2
  • 视频转gif mac_有没有录屏时生成gif的软件

    视频转gif mac_有没有录屏时生成gif的软件Mac自带QuicktimePlayer上次完成word添加好看的格式化代码后,又想着做一个gif图演示功能效果,展示出来会更好。就来摸索摸索了…简单的工具图示如下:1、Launched中搜索2、双击触摸板3、按照工具提示来随意录屏吧~AppStore下载工具PicGIFLite双击图标简单的界面,更深入我心,实测有效,就是gif图片分辨率不高。下图是我做的实测的效果(这个滑动的功能后…

    2025年12月3日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号