美文网首页
websocket协议

websocket协议

作者: 冯艳辉brook | 来源:发表于2018-04-27 17:39 被阅读0次

WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两 点:1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像 Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;2.WebSocket需要通过握手连接,类 似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。

下面是一个简单的建立握手的时序图:

websocket握手过程

这里简单说明一下WebSocket握手的过程。

当Web应用程序调用new WebSocket(url)接口时,Browser就开始了与地址为url的WebServer建立握手连接的过程。

1、建立连接

    Browser与WebSocket服务器通过TCP三次握手建立连接,如果这个建立连接失败,那么后面的过程就不会执行,Web应用程序将收到错误消息通知。

2、向服务端发送握手请求

在TCP建立连接成功后,客户端向服务器发送请求,请求报文中的重点内容如下:

GET /chat HTTP/1.1

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

从GET处可以看出,这是一个基于HTTP的请求。接下来的Upgrade字段和Connection字段完成了对HTTP协议的升级(HTTP Upgrade Request)。Upgrade字段通知服务器,现在要使用一个升级版协议——websocket。接下来是Sec-WebSocket-Key字段,这个字段是一串生成的BASE64加密的密钥,它被一同发送到服务器端。

此外还有诸如Sec-WebSocket-Version、Sec-WebSocket-Protocol等字段,由于是可选字符,对WebSocket协议的实质影响不大,同时为了文章更简洁更容易理解,先不进行介绍。

3、服务器端进行处理

服务器收到客户端请求后要进行响应。首先服务器需要处理客户端传递过来的Sec-WebSocket-Key。服务器端有一个全局唯一标识符GUID,这个是固定的。服务器端将客户端传来的字符串和服务器端的GUID拼接到一起后进行SHA1处理,再进行一次BASE64加密,准备将其返回客户端。

4、服务器端返回响应

服务器端处理完成后,将给客户端返回响应报文,重要部分如下:

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

第一行再次表明此次连接的建立是以HTTP协议为基础的。同时返回了101状态码。101状态码是switching protocols,表示服务器已经理解了客户端的请求,并将通过Upgrade子段通知客户端采用WebSocket协议来完成这个请求。那么协议是什么时候升级到WebSocket的呢?当发送完这个响应最后的空行后,服务器就会切换到Upgrade消息头定义的WebSocket协议。至此完成了从HTTP协议升级的WebSocket协议的过程。同时需要注意,如果返回的状态码不是101,就表示握手升级的过程失败了。中间两行就不用说了,最后一行Sec-WebSocket-Accept返回的就是服务器端处理后的字符串。只有返回了这个字符串才表明握手成功了,返回其他的字符串都表示握手失败。

5、为什么websocket连接是持久的

    websocket协议底层是基于tcp实现的,tcp协议连接本身是持久的,http协议的不持久性是因为http协议将tcp挥手断开了,websocket协议没有进行挥手操作。

相关文章

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

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

  • 1.解释WebSocket,socketio

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

  • 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通信协议...

  • WebSocket SSL 加密浅析

    1 WebSocket 原理 1.1 背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议...

  • SRWebSocket源码解析

    WebSocket协议 中文翻译的WebSocket协议 SRWebSocket 一. 初始化 二. 建立连接 开...

网友评论

      本文标题:websocket协议

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