当前位置: 首页 > 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的秘密(二)
  • 【391天】每日项目总结系列128(2018.03.03)
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript异步流程控制的前世今生
  • Java小白进阶笔记(3)-初级面向对象
  • nodejs实现webservice问题总结
  • php面试题 汇集2
  • Python学习之路16-使用API
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 简单实现一个textarea自适应高度
  • 前嗅ForeSpider教程:创建模板
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 入门到放弃node系列之Hello Word篇
  • 网页视频流m3u8/ts视频下载
  • 我的面试准备过程--容器(更新中)
  • 一个SAP顾问在美国的这些年
  • 译自由幺半群
  • 用element的upload组件实现多图片上传和压缩
  • 用jQuery怎么做到前后端分离
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #Java第九次作业--输入输出流和文件操作
  • #QT(智能家居界面-界面切换)
  • #stm32驱动外设模块总结w5500模块
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)Nginx简介和安装教程
  • (MATLAB)第五章-矩阵运算
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (回溯) LeetCode 46. 全排列
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...