首页 > 其他分享 >WebSocket的原理

WebSocket的原理

时间:2024-03-22 23:55:05浏览次数:32  
标签:协议 HTTP WebSocket 请求 原理 连接 客户端

1. 什么是websocket

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

2. websocket的原理

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

3. websocket的工作流程

下面是 WebSocket 的工作过程,包括握手阶段和通信阶段:

握手阶段:

a. 客户端发起一个 HTTP 请求,请求升级到 WebSocket 协议。这个请求包含了一些特殊的头信息,表明客户端希望建立 WebSocket 连接。

b. 服务器收到这个请求后,会进行升级协议的操作,如果支持 WebSocket,它将回复一个 HTTP 101 状态码,表示成功升级到 WebSocket 协议。

c. 一旦协议升级完成,客户端和服务器之间的连接就变成了全双工,保持开放状态,可以双向通信。

通信阶段:

a. 客户端和服务器可以互相发送消息,这些消息都是以帧(frames)的形式进行传输,而不是传统的 HTTP 请求和响应。

b. 服务器可以主动向客户端推送消息,而客户端也可以主动向服务器发送消息。这种双向通信在实时性要求高的应用中非常有用,比如在线聊天、股票市场数据推送等。

关闭连接:

a. 当双方中的一方决定关闭连接时,它会发送一个关闭帧,通知另一方关闭连接。

b. 另一方收到关闭帧后,也会回复一个关闭帧,然后双方都关闭连接。

注意:

HTTP 有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个 HTTP 请求合并为一个,但是 Websocket 其实是一个新协议,跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器,所以在握手阶段使用了 HTTP 。

3. 为什么WebSocket 可以实现持久连接?

1)协议支持:WebSocket 是一种专门设计用于实现持久连接的协议,与传统的 HTTP 不同。HTTP 是一种请求-响应协议,每次请求后都会关闭连接。WebSocket 则建立在一次握手之后,保持连接开放状态,允许双向通信。

2)资源节约:传统的 HTTP 建立和关闭连接会消耗网络资源和时间。WebSocket 的持久连接避免了这种开销,因此更适用于实时通信的场景。

3)实时性:在某些应用中,特别是需要实时性的应用,WebSocket 的持久连接允许服务器主动向客户端推送数据,而不需要等待客户端的请求。这对于在线聊天、实时游戏、股票市场数据等应用非常重要。

3. websocket与http的关系

3.1 相同点:
都是基于tcp的,都是可靠性传输协议
都是应用层协议
3.2 不同点:
WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息
HTTP是单向的
WebSocket是需要浏览器和服务器握手进行建立连接的
而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接
3.3 联系:
WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的

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

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

4.1 解决方案一:long poll(长轮询)

原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起请求后,如果没消息,就一直不返回 Response 给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

4.2 解决方案二:Ajax轮询

让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。

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

 

 

一、为什么你们项目组中使用WebSocket技术

当我们在处理页面数据自动更新的时候,在使用js不断的请求服务器,查看是否有新数据,如果有就获取到新数据,进行对页面信息的跟新,但是当页面长时间没有更新数据时,这样就会存在资源浪费的情况,所以才会使用WebSocket来解决。

二、UDP和TCP协议的概念

TCP是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

三、什么是WebSocket?

WebSocket是HTML5一种新的协议,WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术,是一种在单个TCP连接上进行全双工通讯协议。

四、全双工通讯协议的概念?

全双工是通讯传输的一个术语。通信允许数据在两个方向上同时传输,他在能力上相当于两个单工通信方式的结合。全双工指可以同时进行信号的双向传输。

全双工是:例如我们使用的手机就是全双工,在同一时刻两个用户可以同时给对方传送数据

半双工:例如我们使用的对讲机,当A方按住通话按钮才可以向B方传送数据,B方也是,在同一时刻只有一个用户能够传送数据(A/用户都可以传递信息,但是不能够同时传递)

单工:例如我们看电视时,我们只能接收对方发送的信息,不能够给对方传递信息;

五、WebSocket和Socket的区别是什么?

Socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。而WebSocket则不同,它是一个完整的应用层协议,包含一套标准的API。

六、Http与WebSocket的区别?

http协议是短链接,因为请求之后,都会关闭连接,下次重新请求数据,需要再次打开连接。WebSocket协议是一种长连接,只需要通过一次请求来初始化链接,然后所有的请求和响应都是通过这个TCP链接进行通信。

标签:协议,HTTP,WebSocket,请求,原理,连接,客户端
From: https://www.cnblogs.com/beatle-go/p/18090619

相关文章

  • 深入了解提示词工程:原理、实践与应用
    一、引言在人工智能领域,尤其是自然语言处理(NLP)任务中,大语言模型如GPT系列已经成为了重要的工具。然而,要充分发挥这些模型的潜力,我们需要掌握一种名为提示词工程(PromptEngineering)的技术。本文将详细介绍提示词工程的原理和实践,并探讨如何通过实验和迭代来提高与大语言模型的......
  • 显卡基础知识及元器件原理分析
    显卡应该算是是目前最为火热的研发方向了,其中的明星公司当属英伟达。当地时间8月23日,英伟达发布截至7月30日的2024财年第二财季财报,营收和利润成倍增长,均超市场预期。财报显示,第二财季英伟达营收为135.07亿美元,同比增长101%,环比增长88%。美国通用会计准则(GAAP)下,净利润为6......
  • 20212217刘恒谦-Exp2 后门原理与实践
    实践过程记录使用netcat获取主机操作Shell,cron启动​ ncat即Netcat,可以收发传输层数据,由攻击者使用。cron是Linux中用于按计划执行脚本的工具,在网络对抗中让受害者连接不稳定时,重连攻击者,由受害者启动。​ 既然如此,受害者需要是Linux,否则没有cron命令,我购买了一台阿里云Ubuntu......
  • 快速排序的原理及其多种方法的实现和优化
    ✨✨✨学习的道路很枯燥,希望我们能并肩走下来!文章目录前言一、快速排序介绍二、快速排序实现的方法(升序)1.hoare版本:2.挖坑法3.前后指针法  三、快速排序的优化1.关于所排序的数据有序或接近有序的问题1.1随机取key方法1.2三数取中法2.关于递归深度过深导......
  • 2020-3-1-jsonp原理
    原理ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,将数据作为参数,在src中进行了调用,这样实现了跨域。实现代码1服务端//nodejsvarhttp=require......
  • @Autowired,@Resource,@Value,@Lazy注入的核心逻辑原理
    classDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactory{@Override@NullablepublicObjectresolveDependency(DependencyDescriptordescriptor,StringrequestingBeanName,Set<String>autowiredBeanNames,TypeConverter......
  • Spring中getBean的生命周期和整个链路原理
    publicabstractclassAbstractBeanFactoryextendsFactoryBeanRegistrySupportimplementsConfigurableBeanFactory{publicObjectgetBean(Stringname)throwsBeansException{returndoGetBean(name,null,null,false);}protected<T&......
  • eNSP华为设备VRRP的原理与实现。
    VRRP(VirtualRouterRedundancyProtocol)虚拟路由冗余协议。当一台服务器的性能产生瓶颈。1.垂直扩展。2.水平扩展,带来了新的问题1台对提供服务,是不需要协调10台对外提供一个服务,服务器集群(群集):高性能、高可靠性只有一种报文:Advertisement报文;其目的IP地址是224.0.0.18,目......
  • 中电金信:技术浅谈 | 动态规划算法的原理和实现
    ​导语:动态规划(Dynamicprogramming)是一种在数学、计算机科学和经济学中使用的方法。动态规划算法与分治法类似,通过将带求解的问题分解为若干个相对简单的子问题(阶段)的方式,来求解复杂问题。本文作者用相对精炼的篇幅内容对动态规划算法进行背景及原理介绍,并举例说明如何进行问题......
  • Synchronized的底层实现原理(转载)
    synchronized一.synchronized解读1.1简单描述synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized翻译为中文的意思是同步,也称之为同步锁。synchronized的作用是保证在同一时刻,被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。1.2特性......