当前位置: 首页 > news >正文

项目实战系列——WebSocket——websock简介

最近项目中需要用到mes和本地客户端进行实时通讯,本来想用webapi进行交互的,但是考虑到高效和实时性,就采用这一项技术。

以往采用的方式——长轮询

客户端主动向服务器发送一个请求,如果服务器没有更新的数据,客户端等待,其中就会存在各个客户端请求等待的问题(await),然后服务器压力就会增加。如果服务器有数据或者超时了,此时客户端得到数据或者返回,并发起下一轮请求。

websocket简介

WebSocket是一个在HTML5中提出的一个高效的全双工实时通讯协议,其出现的意义是可以解决Web应用程序和桌面应用程序的实时通信,也就是(C/S)和(B/S)的交互。

其底层是基于TCP实现的通信,服务器和客户端之间的连接只需要一次握手,不再像之前socket通讯的时候需要三次握手。

以上有什么好处呢?就是我不在需要去轮询服务器发送的内容了,能够节省服务器的资源和贷款,并且具备一定的实时性。

Http/2的支持

基于 HTTP/2 的 WebSockets 具有如下新功能:
(1). 标头压缩。
(2). 多路复用,可减少向服务器发出多个请求时所需的时间和资源。
(3). 使用二进制数据高效传输。

当进行开发的时候,chrome和edge都是默认启用http/2 WebSocket的.

Http与WebSocket的关系

两者都是基于TCP协议上的应用层协议,其关系有如图

通过图可知,http和websocket都是建立在TCP之上实现数据的传输,但是应用场景是不同的,其

(1). WebSocket 是双向通信协议,实现服务和客户端双向发送或接收信息。
(2). HTTP 是单向通信协议,客户端发出请求,服务器才能接收请求并处理。
(3). WebSocket 的通信需要客户端与服务器进行握手建立连接,连接是持久
的,可以在连接通道中双向发送和接收消息。
(4). HTTP 不需要握手,只能是客户端先发起请求给服务器,服务器事先并不
知哪个连接会过来,服务器处理后二者断开,再无瓜葛。
(5). WebSocket 是服务器和客户端都可以主动推送消息,无主次之分,也无先
后之分,而 HTTP 是客户端主动发送请求,服务器被动处理并响应。

 也就是说,只要建立连接,websockt不需要通过http进行收发,而是通过tcp进行全双工通信。

前面介绍了长轮询,当我们在生产环境中需要实时性时,此时请求推送和等待收发会发生延迟,不但增加服务器压力,还会影响现场生产的节拍。那websocket的原理就是

客户端向服务端请求一次TCP连接,HTTP请求包含了一些信息,连接成功之后双方互相通知连接成功,此时可以随时收发数据。

 当我们有多个设备同时向服务端请求时,如果采用原先长轮询的技术,需要存在多个信道,而采用websocket只需要建立一次连接信道,就可以在同一个信道内持久地收发消息,且不存在等待的情况。

所以,在了解了以上情况之后,果断采用此解决方案。

相关文章:

  • 微服务之远程调用
  • 安装好IDEA后,就能够直接开始跑代码了吗?
  • 助力高考,一组彩色的文字
  • 趣谈网络协议
  • 第七章 Three.js 动画与交互
  • 热门开源项目推荐:技术与地址概览
  • laravel8使用中间件实现xss处理
  • 简单说一下STL中的map容器的特点、底层实现和应用场景【面试】
  • 【云原生】Kubernetes----Rancher助力Kubernetes监控
  • 开发uniapp 小程序时遇到的问题
  • DeepSORT(目标跟踪算法) 卡尔曼滤波 状态向量是如何映射到观测向量(测量向量)的即观测矩阵的构建方式
  • MySQL怎么为表添加描述
  • PR插件-图层抖动弹跳缩放旋转模糊闪烁缩放抖动动作效果预设
  • spring管理的对象通过@Init注解修饰的方法不会在new对象的时候触发
  • 【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(二)
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 2017-08-04 前端日报
  • Angular 响应式表单之下拉框
  • DOM的那些事
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java多线程(4):使用线程池执行定时任务
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • React Transition Group -- Transition 组件
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 动态魔术使用DBMS_SQL
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 智能合约Solidity教程-事件和日志(一)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #数学建模# 线性规划问题的Matlab求解
  • (1)STL算法之遍历容器
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (python)数据结构---字典
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (函数)颠倒字符串顺序(C语言)
  • (离散数学)逻辑连接词
  • (一)WLAN定义和基本架构转
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)母版页和相对路径
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .net 中viewstate的原理和使用
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET建议使用的大小写命名原则
  • .NET微信公众号开发-2.0创建自定义菜单
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @Autowired和@Resource装配
  • @staticmethod和@classmethod的作用与区别
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [52PJ] Java面向对象笔记(转自52 1510988116)