首页 > 其他分享 >webSocket协议

webSocket协议

时间:2024-10-22 17:43:17浏览次数:4  
标签:协议 HTTP 请求 用户 服务器 webSocket

websocket是什么

了解websocket之前首先要说一下HTTP。
首先我们想象一下大部分的用户在操作网页时,用户在页面上点击一下按钮前端会给后台服务器发送一次HTTP请求 ,后台返回一次HTTP响应。
但是这种方式的前提都是用户自己请求(点击页面)的方式太被动了,而且只有在请求之后服务器才会做出反应!

那么怎么才能让服务器给用户主动发消息,让他主动一点呢?
webSocket应运而生

webSocket解决的痛点

在没有webSocket的过去在针对这种场景用HTTP时的解决方案是啥呢?
方式一:
让用户不做任何操作让网页能收到信息并发生变更。
以前的方式是在前端代码里不断定时发HTTP请求给后端服务器,服务器收到请求之后相应给前端相应消息。
但这是一种伪服务器推送的方式,他并不是服务器主动,而是前端偷偷请求服务器只是对于用户来说无感知而已。
如扫码登陆就会用到这种方式,在这种操作下前端其实也不知道用户有没有扫码,只是不断的用1到2秒的时间给后端发送请求去询问。(HTTP定时轮询)

方式二:
像上述的方式我们在网页进入开发者模式会看到很多HTTP请求后台服务器的记录,这样消耗带宽的同时也会增加服务器的负担。那有没有更好的方式去解决这个问题呢?
有!很有!非常有! 而且实现成本还非常的低!也就是“长轮询”
我们把超时的时间改长一些比如设置成30秒,在30秒内只要服务器收到了扫描请求就立马返回给客户端进行登录。
如果超出30秒视为超时但是再立马发送下一次请求。这样就完美解决了HTTP请求的次数从而减少了服务器的开销。
于是这种发起请求在较长时间内等待服务器反馈的机制就叫做长轮询机制。

常用的消息队列rocketMQ中消费者取数据时也用到了长轮询。
而这种在用户不感知的情况下服务器将数据推送给浏览器的技术就是服务器推送技术。

但是!但是!但是!这两种方式本质还是前端主动服务器被动的!
于是基于TCP的新的应用层的webSocket协议就被设计出来了

webSocket是如何使用的

在正常访问页面时通常都会先用HTTP协议进行握手,当需要用到webSocket连接时会在HTTP请求中增加特殊的Header头
如:

connection:Upgrade用来表明浏览器想要升级协议
Upgrade:webSocket用来表示客户端想升级成webSocket协议
Sec-WebSocket-Key:base64

这是服务器也支持那么将会升级成webSocket协议,然后开始走webSocket握手流程
根据Sec-WebSocket-Key通过算法得出一个新的字符串,将他放在HTTP中ses-ws-accept里再加上101返回给浏览器

HTTP/1.1 101 Switching Protocols //101指协议切换
ses-ws-accept
Upgrade: websocket
Connection: Upgrade

浏览器用同样的算法将BASE64码转成另一段字符串,如果跟服务器传过来的字符串一致那么验证通过。

webSocket和HTTP

他们都是基于TCP的协议
webSocket在经历三次TCP三次握手之后将HTTP协议升级成webSocket协议,后续双方就通过webSocket协议进行通讯了

数据包在webSocket中被称为帧,下图为帧的数据格式

  • opcode
    这里标注了这是一个什么类型的数据帧。比如1是指text类型(String类型)、2是指2进制的数据包、8为关闭连接信号
  • payload
    想要传输的数据长度,单位是字节

webSocket完美继承了TCP的双全工能力,并且还提供了解决粘包的方案,适用于服务器和客户端频繁交互的大部分场景。
如:网页聊天、小程序游戏、协调办公软件
补充:
websock只是在建立连接的过程中会用到HTTP,升级成webSocket协议之后就跟HTTP没有一点关系了,HTTP只是扮演了短暂的工具人角色。

标签:协议,HTTP,请求,用户,服务器,webSocket
From: https://www.cnblogs.com/Edehuag/p/18493077

相关文章

  • 如何设计一个通信协议
    1.网络层次1.1具体层次以及封装封装的协议结构一般是协议头+数据。2.网络通信存在问题2.1设计协议时,边界问题如何处理场景以及问题:在TCP流式传输中,流式传输也就是一端只关心向管道发送数据,另外一边只要管道存在数据就接收数据。一个客户端发送N个100字节的消息,此时服......
  • SpringBoot搭建webSocket长链接,实现双向实时通信
    很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数......
  • 为什么在http协议中使用base64编码方式传输二进制文件
    相关:图解Base64实现原理并使用js实现一个简单的Base64编码器常用加密方法之Base64编解码及代码实现一直都知道在http协议中使用base64的方式传递二进制文件,虽然感觉不理解,但是也都从来没有探究过原因,今天突然看到这方面的资料,这才有了一些理解。PS:把带有图片的网页......
  • 海康设备视频平台/视频流协议在EasyCVR私有化视频平台中的应用
    EasyCVR平台凭借其标准化、兼容强、应用全面的特点,在能源、交通、公安、金融、教育等行业领域得到了广泛应用。平台支持多品牌、多协议视频设备及各类视频平台资源的接入,实现了视频资源的大规模汇聚和融合应用。通过云端预览、录像、管理等一系列视频服务功能,平台为各行业视频应用......
  • 安全见闻-通信协议安全
    目录通讯协议的安全问题1.保密性问题2.完整性问题3.⾝份验证问题4.可⽤性问题5.协议实现问题6.协议设计缺陷7.移动通讯协议安全问题8.物联⽹通讯协议安全问题9.⼯业控制系统通讯协议安全问题结语:泷羽sec:安全见闻(6)_哔哩哔哩_bilibili安全见闻(6)_哔哩哔哩_bilibi......
  • ISUP协议视频平台:EasyCVR私有化视频平台视频汇聚,存储系统怎么选?
    一、EasyCVR视频监控存储系统的核心优势TSINGSEE青犀EasyCVR视频汇聚平台是一个具备高度集成化、智能化的视频监控汇聚管理平台,拥有远程视频监控、录像、存储、回放、语音对讲、云台控制、告警等多项核心功能。该系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规......
  • HL7协议简介及其在STM32上的解析实现
            近期完成一个医疗相关的项目,其中包括了体征监测设备,该设备使用的通信协议便是HL7V2.4协议,在医疗信息化领域,HL7(HealthLevelSeven)协议扮演着至关重要的角色。它是一种国际标准,用于定义医疗机构间以及医疗设备与信息系统之间的数据交换格式和通信协议。HL7标......
  • 【JS逆向百例】某赚网 WebSocket 套 Webpack 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • IIC通讯协议笔记
    iic通讯协议片上外设iic主发送器主发送器通讯过程发送开始位后等待EVT5,发送从机(slave)地址等待EVT6和发送要写入从机的寄存器等待EVT8,发送数据等待EVT8_2片上外设主接收器发送过程接收过程......
  • Modbus协议概述及实例详解(二)附源码
        通过上一篇《Modbus协议概述及实例详解(一)》相信大家已经了解到Modbus的相关原理以及应用,也了解到了Modbus中在RTU/ASCII/TCP三种协中必不可少协议RTU协议。本章将详细讲解关于ModbusRTU协议的相关内容并附带源码一份,以帮助有需要的读者朋友可以快速开发迭代自己的......