python之websocket

作者: 我爱学python | 来源:发表于2019-06-10 15:51 被阅读38次

    一、websocket

       WebSocket协议是基于TCP的一种新的协议。WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符。它实现了浏览器与服务器全双工(full-duplex)通信。其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信。

     本文将使用Python编写Socket服务端,一步一步分析请求过程!!!

    1. 启动服务端

    启动Socket服务器后,等待用户【连接】,然后进行收发数据。

    2. 客户端连接

    当客户端向服务端发送连接请求时,不仅连接还会发送【握手】信息,并等待服务端响应,至此连接才创建成功!

    3. 建立连接【握手】

    请求和响应的【握手】信息需要遵循规则:

    从请求【握手】信息中提取 Sec-WebSocket-Key

    利用magic_string 和 Sec-WebSocket-Key 进行hmac1加密,再进行base64加密

    将加密结果响应给客户端

    注:magic string为:258EAFA5-E914-47DA-95CA-C5AB0DC85B11

    请求【握手】信息为:

    提取Sec-WebSocket-Key值并加密:

    4.客户端和服务端收发数据

    客户端和服务端传输数据时,需要对数据进行【封包】和【解包】。客户端的JavaScript类库已经封装【封包】和【解包】过程,但Socket服务端需要手动实现。

    第一步:获取客户端发送的数据【解包】

    解包详细过程:

    第二步:向客户端发送数据【封包】

    5. 基于Python实现简单示例

    a. 基于Python socket实现的WebSocket服务端:

    b. 利用JavaScript类库实现客户端

    6. 基于Tornado框架实现Web聊天室

    Tornado是一个支持WebSocket的优秀框架,其内部原理正如1~5步骤描述,当然Tornado内部封装功能更加完整。

    以下是基于Tornado实现的聊天室示例:

    相关文章

      网友评论

        本文标题:python之websocket

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