美文网首页编程@IT·互联网程序员
Websocket协议(学习总结)

Websocket协议(学习总结)

作者: 最有文化的码农 | 来源:发表于2017-02-23 14:50 被阅读330次

说到协议,我们第一反应都会想到http,既然这样,那就对Http协议再简单的BB一番,没有对比就没有伤害,我们来见证一下最终是谁会是受伤的一方,当然结果还是你说了算,不要问小编为什么,因为你牛逼啊。

Http协议:

众所周知的超文本传输协议,所有的万维网都遵循此协议,这家伙出道早(1945年传说中RFC-http1.0),加上又没有竞争对手可称之为在协议界的一大霸主。

建立在TCP协议之上,称之为http,但是建立在SSL和TLS协议层之上,又变成了人们常说的https。总之不管怎样,他们只是所承载的协议层不同罢了,不要太介怀。如果你很是介怀,没办法,小编只能说你先去熟悉网络的7层协议,一层层分析,慢慢介怀去。

再来简单说下,http请求响应模式:

宏观上看是不是超级简单?一个Request 对应一个 Response。建立连接后,客户端发送一次请求,服务端确认收到了,就被动反应一下。看起来很不友好的样子,在1.0时更可怜,默认的是短连接,客户端和服务端之间频繁的建立连接,频繁的断开连接,在1.1起开始引入keep-alive(长连接)即是在http请求的header中加了一个识别:connetion:keep-alive(代表告诉服务器,我要的是长连接)。

但依旧解决不了服务端的‘高冷’和‘惰性’。因此引发了下一个问题:http协议是有很大缺陷的。

Http协议的缺点:

通过上面简单的介绍,我们明显感觉到,客户端和服务端之间的交互有点生硬,服务端有点被动,客户端问一句,服务端答一句,客户端没命的啰嗦就会导致浪费时间和带宽(针对于短连接来说)。

如果是长连接的话,那可能更惨,客户端发一个请求,服务端没有及时返回,链接就一直建立着,上面也说了,http的相应模式无论是多少台客户端发出请求,服务端的标配是一个request对应一个response,如此说来,如果很多的这样的链接的话,那么服务端就有扛不住的时候,所以有的时候就会碰到server is too busy,这时你又该骂娘了。

说到这,我们再来说说,这种不友好的相应模式最终的根源是啥。

哦,原来是有两种机制导致的,Ajax轮询long poll的轮询机制,分别对应短连接和长连接的实现形式。

ajax轮询是,孜孜不倦,乐在其中啊,那我就隔几秒请求一次,服务端和客户端来回的断开建立,就这样一问一答直到客户端拿到了自己想要的东西,所以这种沟通贼浪费时间和宽带。

long poll呢也是采用了轮询机制,但是他轮询的时间比较长,如果把ajax看成是发短信,那他就是打电话了(可以称之为阻塞模型),客户端就和服务端杠上了,高冷是吗?没关系,我会一直等,等你有数据反馈给我,就这样一直占线轮询。

综上所述,http的一大‘亮点’就是,客户端不请求,服务端绝对不会主动。凸显了http数据传输的一个被动性。

WebSocket协议:

这个社会是发展的,所有风靡一时的荣耀最终都会被崛起的新事物给慢慢取代,当然说的有点严重,反正就是那意思了。鉴于http的缺点,伴随着http的发展,直到h5出现,Websocket应运而生。

不过,新事物的单身往往都是踩在巨人的肩膀上的,WebSocket也是基于http协议的一种持久化的协议,并不是跟http毫无关系,可以说是http协议的一种进化。

那么Websocket是怎样建立连接的呢?

GET /chat HTTP/1.1

Host: server.example.com

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13 Origin: http://example.com

以上是请求的头,Websocket很是高调啊,生怕对方不知道是自己的协议,整了这么多关键字眼,废话不多说,抽几个关键的说说吧。

Upgrade && Connection:告诉服务端我采取的是什么协议。

Sec-WebSocket-Key:别乱来,我是有身份证的。

剩下的就不说了,很显然,客户端是比较仔细的,定制的很是详细。

服务器接到请求后,就回应了下:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Sec-WebSocket-Protocol: chat

看起来服务端也是很守规矩,告诉客户端,你看看信息对不对。

细心的同学会发现,不对啊,那个发送的key和请求的key怎么不一样呢?孩子别太单纯那是服务端加过密的,小编没搞错的话应该是SHA-1的加密方式。

好了,以上就是客户端和服务端建立连接的过程。

Websocket特点:

回归到http协议的被动性和一些缺点,那么Websocket协议就凸显的很好了,请求只需要成功建立一次,这次咸鱼翻身了,服务端会屁颠屁颠的主动把信息反馈给客户端,完美解决了之前的被动性,提高沟通效率,减少了沟通成本,真正建立了久连接。

但是,人无完人,websockt需要浏览器的支持,如果有些浏览器不支持,也没什么卵用了。另外假如设置的有代理,需要代理也支持。更要命的是需要服务器支持,如果服务器不支持,那对不起,发了一堆什么破乱玩意,本座不认识,打回!

另外,websocket实现的是双向通道,对网络的链接要求很高,这是其优点也是缺点,一旦一方网络有问题,那就直接game-over了。

小编有话说:

以上是本人看了些资料,加以消化和总结的,有什么不对的地方希望给出改正,另外,两种协议终究哪个更好,你们说了算。

相关文章

  • Websocket协议(学习总结)

    说到协议,我们第一反应都会想到http,既然这样,那就对Http协议再简单的BB一番,没有对比就没有伤害,我们来见...

  • 好程序员web前端培训分享WebSocket协议

    好程序员web前端培训分享WebSocket协议,WebSocket协议简介 一.WebSocket协议简介 1....

  • 1.解释WebSocket,socketio

    1.解释WebSocket,socketio WebSocket:是一个标准网络传输协议 WebSocket协议是...

  • 应用层

    注:采转归档,自己学习查询使用 9527 (DNS协议)先生,要点单吗? (HTTP协议)Websocket协议D...

  • python之websocket

    一、websocket WebSocket协议是基于TCP的一种新的协议。WebSocket最初在HTML5规范...

  • 在tornado中使用WebSocket

    什么是WebSocket WebSocket是一种网络通信协议,与Http协议不同的是,WebSocket 连接允...

  • 基于koa的前后端分离的socket.io使用

    1、websocket websocket是html5出的协议,它是基于TCP协议,利用http协议建立连接,实现...

  • 2.WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • websocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

网友评论

  • jerrwy:我们有办法查看多个http请求是否是一个tcp连接中吗
    jerrwy:@Kevin_4dc7 这怎么能判断是一个tcp连接,请求都是指向一台服务器上web服务器,服务器ip肯定相同啊。我是想问,一个浏览器发出的多次请求,比如100次,timeout是5分钟,他一共请求了10分钟,那肯定不是一个tcp连接,可以知道这100次中 哪些是一个tcp连接中的吗
    60f8d797892d: @_Waymon 看ip地址

本文标题:Websocket协议(学习总结)

本文链接:https://www.haomeiwen.com/subject/qslbwttx.html