什么是websocket协议

2023-10-29

websocket和http协议一样,都是基于tcp协议而发展起来的。在TCP两端,同一时间内,双方都可以主动向对方发送数据。这就是所谓的全双工

http协议,是基于tcp的,但是在同一时间内,客户端和服务器只能有一方主动发数据,这就是所谓的半双工,这是由于http在设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,所以就做了简化。

但是现在应用场景越来越复杂,比如说网页游戏,在相同的时间内,玩家不仅要向服务端传递数据,服务端也需要主动向玩家推送游戏数据,所以用http协议已经不能满足需求了,这时就可以引入websocket协议,来实现全双工的数据发送。

http协议的应用场景

平时在浏览网页时,比如说看到一则新闻标题,点击一下后,就跳转到了新闻详情页,从http角度来看,就是点击之后,前端发送了一个http请求,然后服务端返回http响应,这样我们就能看到新闻具体内容了。这种由客户端主动请求,服务器响应的方式也满足大部分网页的功能场景。但是这种情况下,服务端是不会主动给客户端发送消息的。但是有时候我们登录app后,会受到系统推送的消息,这种我们没有做任何操作,但是服务端却主动推送过来的消息,是怎么实现的呢?

 一、使用HTTP不断轮询

    这种方法的原理是网页的前端代码里不断定时发HTTP请求到服务器,服务器收到请求后给客户端响应消息。 但这其实是一种伪服务器推送。它其实并不是服务器主动发消息到客户端,而是客户端自己不断偷偷请求服务器,只是用户无感知而已。这种多常见于扫码登录。当出现登录二维码后,前端不能判断用户是否进行了扫码,所以需要每隔一段时间,向后端询问是否有人扫码,当进行扫码后,服务端就会返回登录成功信息,前端就可正常登录,但是这样会有明显的两个问题,由于需要不间断的访问,会产生过多的http请求,造成网络和服务器的压力。而且若访问时间间隔太久,扫码后,会有明显的延迟后,才正常登录。那么有没有更好的方式呢? 

二、使用长轮询

我们知道,HTTP请求发出后,一般会给服务器留一定的时间做响应,比如3s,规定时间内没返回,就认为是超时。

如果我们的HTTP请求将超时设置的很大,比如30s,在这30s内只要服务器收到了扫码请求,就立马返回给客户端网页。如果超时,那就立马发起下一次请求。

这样就减少了HTTP请求的个数,并且由于大部分情况下,用户都会在某个30s的区间内做扫码操作,所以响应也是及时的。

websocket是怎么建立的?

要建立websocket连接,首先需要建立http连接,连接建立后,当要升级为websocket时,会在HTTP请求里带上一些特殊的header头

这些header头的意思是,浏览器想升级协议(Connection: Upgrade),并且想升级成websocket协议(Upgrade: websocket)

同时带上一段随机生成的base64码(Sec-WebSocket-Key),发给服务器。

如果服务器正好支持升级成websocket协议。就会走websocket握手流程,同时根据客户端生成的base64码,用某个公开的算法变成另一段字符串,放在HTTP响应的 Sec-WebSocket-Accept 头里,同时带上101状态码,发回给浏览器。

之后,浏览器也用同样的公开算法base64码转成另一段字符串,如果这段字符串跟服务器传回来的字符串一致,那验证通过。

就这样经历了一来一回两次HTTP握手,websocket就建立完成了,后续双方就可以使用webscoket的数据格式进行通信了。

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是websocket协议 的相关文章

随机推荐

  • 图片路径上传的配置问题

    需求 静态资源目录 data ruoyi uploadPath 配置静态资源服务 且指向静态资源目录 配置静态资源服务 static resources location static alias data ruoyi uploadPath
  • nginx 动静分离 正则匹对 alias root url rewrite重写

    Nginx 基础应用实战 04 动静分离 配置反向代理 location proxy pass http 127 0 0 1 8080 root html index index html index htm 增加每一个location l
  • 基于Arduino UNO的小车——基本操作

    材料 小车套件 Arduino UNO板子 面包板及连接线 L298N电机驱动模块 电池盒 电池 一 智能小车套件拼装 关于小车套件拼装建议大家在做小车之前先考虑好需要哪些功能模块 为了方便在制作小车的过程中可以方便将所需模块固定在已有的小
  • Unity 解决PackageManager消失问题

    更新20190416 Unity2018 3 12及之后版本稳定了不少 一些packageManager的报错也进行显示 可使用此版本进行开发 更新20201213 Unity2019 4 x版本及以上 Package Manager新增连
  • docker镜像的版本(bullseye、buster、slim、alphine)

    docker镜像的版本 bullseye buster slim xxx alphine 版本含义 版本含义 以 Python 的官方镜像为例不同版本含义如下 1 buster jessie stretch bullseye 这三个代表不同
  • r dataframe删除几列_R语言

    数据框 概念 在R语言中 数据框 dataframe 组织数据的结构与矩阵相似 但是其各列的数据类型可以不相同 一般情况 数据框的每列是一个变量 每行是一个观测样本 虽然 数据框内不同的列可以是不同的数据模式 但是数据框内每列的长度必须相同
  • 总结的iOS、mac开源项目及库,持续更新。。。。 github排名 https://github.com/trending,github搜索:https://github.com/search

    大家先看下目录 具体的内容请点击 https github com Tim9Liu9 TimLiu iOS 图表 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其
  • 功能丰富的 Markdown 笔记工具:FSNotes Mac中文版图文安装教程

    FSNotes Mac版是Mac平台上一款纯文本笔记本管理器 FSNotes for mac中文版支持Markdown RTF等格式 轻松查看和编辑数据 还可以将数据存储在文件系统中 同时具备iCloud同步功能 使用非常便捷 FSNote
  • 司守奎《数学建模算法与应用》 第二版

    内容介绍 本书涵盖了很多同类型书籍较少涉及的新算法和热点技术 主要内容包括时间序列 支持向量机 偏最小二乘面归分析 现代优化算法 数字图像处理 综合评价与决策方法 预测方法以及数学建模经典算法等内容 本书既可以作为数学建模课程教材和辅导书
  • Tesseract OCR 训练字库

    Tesseract OCR是一款由HP实验室开发由Google维护的开源OCR引擎 在字符识别领域发挥着举足轻重的作用 除了使用软件自带的中英文识别库 我们可以使用Tesseract OCR训练属于自己的字库 下面 我简要介绍一下操作步骤
  • Node.js GET/POST请求

    Node js 中的 HTTP 模块提供了创建 HTTP 服务器和发送 HTTP 请求的功能 在本文中 我们将探讨如何使用 Node js 发送 GET 和 POST 请求 首先 您需要使用 http 模块发送 GET 请求 可以使用 ht
  • 局域网——MC无法访问服务器或Ping通

    和室友玩MC的时候 他在局域网内创建服务器后 我一直无法搜索到他的服务器 我也连了他的热点 IP地址也是同一网段的 ping了一下他的机器 请求超时 上网搜了一下 最后发现是因为我装了VM 机器上有VM创建给虚拟机用的虚拟网卡 应该是因为游
  • 解析JSON有俩种方式:JSONObject和GSON

    JSONObject JSONObject解析JSON文件 private void parseJSONWithJSONObject String json data try JSONArray jsonArray new JSONArra
  • 【论文精读】CVPR2022 - 解耦知识蒸馏

    论文精读 CVPR2022 解耦知识蒸馏 论文原文 Decoupled Knowledge Distillation 获取地址 https ieeexplore ieee org stamp stamp jsp tp arnumber 98
  • 使用QTDesigner实现简易的信号与槽

    前言 在pyqt5中使用信号与槽的概念 来实现组件的相关交互动作 信号 外界对组件执行的动作 比如 用鼠标勾选 用鼠标滑过 在文本框中输入文字 鼠标点击按钮等 也可以理解为信号就是一种输入 是用户对界面的各种动作 这些动作通过界面传到了代码
  • Spawn-FCGI安装

    Spawn FCGI安装 获取spawn fcgi编译安装包 在 http redmine lighttpd net projects spawn fcgi wiki 上可 以获取当 前最新的版本 tar zxvf spawn fcgi x
  • 基于视觉的服装尺寸自动测量系统

    文章目录 前言 一 系统性能介绍 1 测量误差 2 测量速度 3 测量服装类型与参数 4 系统的其他功能 二 系统工作条件 三 系统的解决方案 1 相机畸变校正 2 采集待测服装图片 3 分割服装 4 基于最小圆的距离向量特征的提取 5 基
  • SpringBoot拦截器失效问题excludePathPatterns失效问题

    excludePathPatterns失效问题 做项目的时候想添加拦截器白名单 不做拦截的项目 然后添加过滤 registry addInterceptor loginInterceptor addPathPatterns excludeP
  • 全局加载less变量文件

    css preprocessorOptions less modifyVars hack true import reference pathResolve src design var index less additionalData
  • 什么是websocket协议

    websocket和http协议一样 都是基于tcp协议而发展起来的 在TCP两端 同一时间内 双方都可以主动向对方发送数据 这就是所谓的全双工 http协议 是基于tcp的 但是在同一时间内 客户端和服务器只能有一方主动发数据 这就是所谓