那些很重要,但是不常用的技术,websocket( 二 )


虽然可以做到实时更新 , 但是为了保留响应 , 一次连接饿持续时间也变长了 。 期间 , 为了维持连接会消费更多的资源 。
从上面两种方式中 , 其实可以看出是再不断的建立http连接 , 然后等待服务器处理 , 可以体现出了http的特点:被动性 , 即:请求只能由客户端发起 。 服务器端不能主动联系客户端 。 不管怎么样 , 上面这两种都是非常消耗资源的 。 ajax轮询 需要服务器有很快的处理速度和资源 。 (速度)长轮询 需要有很高的并发 , 也就是说同时接待客户的能力 。 (场地大小)
除了以上这些 , HTTP还是一个无状态协议 。 通俗的说就是 , 服务器因为每天要接待太多浏览器了 , 是个健忘鬼 , 你一断连接 , 他就把你的东西全忘光了 , 把你的东西全丢掉了 。 你第二次还得再告诉服务器一遍 。
WebSocketWebSocket其实是HTTP协议上的一种补充 , 他们有交集但并不是全部 。
那些很重要,但是不常用的技术,websocket文章插图
一旦web服务器和客户端建立起websocket协议的通信连接 , 之后所有的通信都依靠这个专用连接进行 。 只需要经过一次HTTP请求 , 就可以做到源源不断的信息传送了 。
那些很重要,但是不常用的技术,websocket文章插图
websocket是基于HTTP协议的 , 或者说借用了http的协议来完成一部分握手 。 为了实现websocket通信 , 在http建立连接后 , 还需要进行一次“握手”的步骤 。
握手 · 请求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: 为了实现websocket通信 , 需要用到http的Upgrade首部字段 , 告知服务器通信协议已发生改变:我要发起的是websocket协议 。 以达到握手的目的 。 Sec-WebSocket-Key字段记录着握手必不可少的键值 , 用于验证服务器是否支持websocket通信 。 Sec-WebSocket-Protocol字段记录的是所需要使用的协议 。
握手 · 响应HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat对于客户端的请求 , 服务器返回状态码 101 Switching Protocols的响应 。 返回Upgrate告诉客户端即将升级的协议是Websocket协议 。 Sec-WebSocket-Accept字段值是由握手请求中的Sec-WebSocket-Key字段值加密过后生成的 。 Sec-WebSocket-Protocol 则是表明最总使用的协议 。
到这里 , http已经完成所有他的工作了 , 接下来通信时不再使用HTTP的数据帧 , 而是使用websocket独立的数据帧 。
那些很重要,但是不常用的技术,websocket文章插图
因此 , websocket协议具有以下的特点: