美文网首页程序员
websocket 探究

websocket 探究

作者: Jinwong | 来源:发表于2018-09-27 01:39 被阅读6次

    1. websocket 是什么

    Html开始提供一种浏览器与服务器进行全双工通信的网络技术,属于应用层协议。它基于TCP传输协议,并复用Http的握手通道

    2. 优点

    • 支持双向通信,实时性更强
    • 更好的二进制支持
    • 较少的控制开销。创建连接后,客户端与服务端进行数据交换时,协议控制的数据包头部较小,而Http 协议每次通信都需要携带完整的头部。
    • 支持扩展。websocket协议定义了扩展,用户可以扩展协议或者实现自定义的子协议(比如支持自定义压缩算法)

    3. 连接过程

    WebSocket协议是基于TCP协议上的独立的通信协议,在建立WebSocket通信连接前,需要使用HTTP协议进行握手,从HTTP连接升级为WebSocket连接。浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

    WebSocket定义了两种URI格式, “ws://“和“wss://”,类似于HTTP和HTTPS, “ws://“使用明文传输,默认端口为80,”wss://“使用TLS加密传输,默认端口为443。

    连接过程如下:

    • 客户端建立到服务器的TCP连接
    • 客户端请求将当前TCP连接用作websocket
    • 服务器收到请求, 同意并确认将此 TCP 连接用作 websocket
    • 客户端收到确认, HTTP 协议通信结束
    • 双方使用 websocket 协议自由双向通信

    4. 数据帧格式

    Websocket在通信的最小单位为帧,由一个或者多个帧组成一条完整的消息。
    发送端,将消息切割成多个帧,并发给服务端;接收端,接收消息帧,并将关联的帧重新组装成完整的消息。

    当WebSocket的接收方收到一个数据帧时,会根据FIN的值来判断,是否已经收到消息的最后一个数据帧

    FIN=1表示当前数据帧为消息的最后一个数据帧,此时接收方已经收到完整的消息,可以对消息进行处理。FIN=0,则接收方还需要继续监听接收其余的数据帧。

    此外,opcode在数据交换的场景下,表示的是数据的类型。0x01表示文本,0x02表示二进制。而0x00比较特殊,表示延续帧(continuation frame),顾名思义,就是完整消息对应的数据帧还没接收完。

    相关文章

      网友评论

        本文标题:websocket 探究

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