概述
最近在研究WebSocket以及.NET环境中的SignalR类库,写篇博客来总结并加深一下自己的理解。并希望借此能养成写博客的习惯(●’◡’●)
WebSocket原理
1、WebSocket 协议本质上是一个基于 TCP 的协议,本身并不是协议,而是一个调用接口(API),通过WebSocket,我们才能使用TCP/IP。
2、WebSocket是全双工通道,可以双向通信
3、WebSocket 请求过程【客户端浏览器首先要向服务器发起一个 HTTP 请求(握手连接),这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息”Upgrade: WebSocket”表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket 连接就建立起来了,双方就可以通过这个连接通道自由的传递信息,并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接】
4、建立连接之后,真正的数据传输阶段是不需要http协议参与的
WebSocket的兼容性
1、在.Net Framework中,只有4.5及以上的版本才支持
2、对服务器环境也有所要求,IIS8版本及以上,换句话需要windows Server 2008 以及以下版本是不能使用的,因为2008上的IIS版本为7.5
WebSocket之前的模拟实时技术
1、Ajax轮询:【轮询就是循环的访问访问服务器,就是写一个循环发送我的请求,如果请求完成了,不管有没有数据给我,我再次发送,发送完了我又发送,这种模式就是轮询】
轮询缺点:本质上是客户端从服务器要资源,且会占用服务器过多资源,如果并发量高了服务器容易宕机。
2、长轮询【长轮询是对轮询的改进,客户端通过请求连接到服务器,并保持一段时间的连接状态,直到消息更新或超时才返回Response并中止连接,可以有效减少无效请求的次数】
缺点:本质上还是属于轮询,是客户端从服务器要资源,并没有实质的改变
3、永久帧【ForeverFrame:它适用于IE浏览器,是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面】
缺点:会导致主页面的加载条始终处于“loading”状态,体验很差
4、服务器发送事件:【serverSentEvents:服务器向客户端声明,接下来要发送的是流信息(streaming)。
也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流。流信息本质就是下载】
缺点:只能实现服务器向客户端单向通信,并没有达到双工通信
参考
1、https://www.cnblogs.com/accordion/p/7764460.html
2、https://www.cnblogs.com/fuqiang88/p/5956363.html
最后
以上就是大胆电话为你收集整理的WebSocket初探的全部内容,希望文章能够帮你解决WebSocket初探所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复