| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> webSocket简单介绍和应用 -> 正文阅读 |
|
[网络协议]webSocket简单介绍和应用 |
简单介绍1、webSocket是HTML5下不同于http的一种新协议(本质上也是基于tcp协议),实现了浏览器和服务器的全双工通信,是一个持久化的协议
原理:websocket为应用层协议,其定义在TCP/IP协议栈之上通过握手机制,在客户端和服务器之间建立了一个类似TCP的长连接,从而方便他们之间的双向通信 数据收发的三个过程? 1)TCP协议的三次握手四次挥手的过程必然存在 ??2)websocket协议本身的 webSocket和http协议的区别:相同点:1、都是基于tcp的可靠性传输协议 2、都属于应用层协议 不同点:1、webSocket是双向通信协议,模拟Socket协议,可以双向发送或者接受信息,而HTTP是单向的。 2、webSocket是需要浏览器和服务器握手建立连接的 3、http是由浏览器发起向服务器的连接,服务器预先并不知道这个连接。 两者联系:webSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协 议的。 webSocket发送数据的总体过程 1、首先,客户端发起HTTP请求,经过TCP的三次握手后,建立TCP连接;在HTTP请求中存放WebSocket支持的版本信息等,如:Upgrade,connection,webSocket-Version等 2、服务器在收到客户端握手的信息请求后,同样产用HTTP协议回馈数据 3、最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信 注意: 最初握手阶段是http协议,握手完成后就切换到了webSocket协议,并完全与http协议脱离了 建立通讯时,是由客户端主动发起连接请求的,服务端被动监听。 webSocket出现的价值http----------------long poll(长轮询)-----------Ajax轮询(短轮询)-------------webSocket 1、http http是一种无状态协议,每当一次会话完成后,服务端都不知道下一次的客户端时谁,需要每次知道对面时谁,才进行相应的响应,有较大的沟通障碍 http协议产用一次一次请求,一次响应,每次请求和响应都携带大量的header头,对于实时通讯来讲,解析请求头也需要时间,效率低下 只能一收一发,也就是说客户端发请求,服务端返回数据,不能实现主动收发。 2、long poll 对于http带来的问题,出现了第一个解决的方法--长轮询 简单说,当客户端想服务端发送请求时,如果服务端的数据没有进行变更,那么请求会停在那,知道服务端的数据发生了变更,或者等到一定时间超时才会返回。返回后,客户端又会立即再次发起下一次的长轮询。 优点事解决了http不能实时更新的弊端,但是因为这个事件很短,发请请求即处理请求返回响应,实现了(伪长连接) 总体来说:
3、Ajax轮询 基于http的特性,简单讲就是规定每隔一段时间就由客户端发起一次请求,查询有没有新消息,如果有,就返回。没有的话就等待相同的事件间隔再次查询 优点是解决了http不能实时更新的弊端,因为这个时间很短,发请请求即处理请求返回响应,把这个过程放大N倍之后,相当于request===response
从例子上来看有两个问题: ? 1、假如说,花婕打电话的时间间隔为10分钟,当他收到快递前最后一次打电话,快递员说没到,他刚挂掉电话,快递入库了(就是到了),那么等下一次时间到了,花婕打电话知道快递到了,那么这样的通讯算不算实时通讯?很显然,不算,中间有十分钟的时间差,还不算给快递员打电话的等待时间(抽象的解释:每次request的请求时间间隔等同于十分钟,请求解析相当于等待) 2、假如说花婕所在的小区每天要收很多快递,每个人都采取主动给快递员打电话的方式,那么快递员需要以多快的速度接到,其他人打电话占线也是问题(抽象解释:请求过多,服务端响应也会变慢) 总体来说,Ajax轮询存在的问题 1、推送延迟 2、服务端压力,配置一般不会变化,频繁的轮询会给服务端造成很大的压力 3、推送延迟和服务端塔里无法中和。降低轮询的间隔,延迟降低,压力倍增;增加轮询的间隔,压力降低,延迟增高 4、webSocket 一但webSocket建立连接之后,后续数据都是以帧序列的形式传输。在客户端断开webSocket连接或Server端中断连接前,不需要客户端和服务端发起连接请求。在海量并发及客户端和服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接收消息在同一个持久连接上发起,实现了真长连接,实时性能明显。
WebSocket有以下特点: 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。 HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5) webSocket基本应用1、创建对象
2、监听事件 ①连接成功事件
②接收数据事件
③关闭连接事件
重连机制 一般断线时都会触发websocket的onclose方法,因此,只需在此方法中重新发起一个websocket连接即可
webSocket心跳保活 websocket长连接有默认的超时时间(1分钟),也就是说,超过一定的时间客户端和服务器之间没有发生任何消息传输,连接会自动断开;除此之外,服务器或防火墙一般也会在一段时间不活动并超时之后终止外部的长连接。因此,若需要使客户端一直保持连接,就需要设置心跳保活机制了。
webSocket前端主动断开的方法
webSocket里面添加Token参数的方法 1、send发送参数
2、请求地址中携带参数
3、基于协议头 websocket请求头中可以包含Sec-WebSocket-Protocol这个属性,该属性是一个自定义的子协议。它从客户端发送到服务器并返回从服务器到客户端确认子协议。我们可以利用这个属性添加token。
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:48:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |