理解Python使用WebSocket的逻辑生态

  • 前言

    RestfulWebSocket的区别与意义在逻辑上理解起来并不难,但是关于怎么使用WebSocket总是一头雾水,restfule理解起来很直观:

    df = restful_get_data
    result = deal_data(df)
    

    但是websocket是推过来的数据,数据不成块,怎么用呢?

  • websocket概念

  • 几个常见概念
    1. 握手:握手是确保服务器与客户端同步的过程;
    2. websocket(Web套接字):web套接字被定义为服务器和客户端之间的双向通信,实现客户端与服务端的实时通讯;
    3. URLHTTP有自己的模式,WebSocket也有自己的模式:

    在这里插入图片描述

    1. 全双工:来自两端的通信具有相当快的速度。

    websocket之前,web客户端和服务器之间的所有通信仅依赖于HTTP。

    websocket是一个基于TCP的协议;一个传输层。

    WebSocket是一种有状态协议,而HTTP是无状态协议。

    1. 建立Web Socket连接的步骤如下:
      • 客户端通过称为Web Socket握手的进程建立连接;
      • 该过程从客户端向服务器发送常规HTTP请求开始;
      • 请求升级标头。在此请求中,它通知服务器该请求是针对Web Socket连接的;
      • Web Socket URL使用ws方案;

    初始请求标头的一个简单示例如下:

    GET ws://websocket.example.com/ HTTP/1.1
    Origin: http://example.com
    Connection: Upgrade
    Host: websocket.example.com
    Upgrade: websocket
    
  • websocket事件

    四个主要的Web Socket API事件,每个事件都通过分别实现onopenonmessageoncloseonerror等函数来处理:

    1. 打开

      当在客户端和服务器之间建立了连接,就会从Web Socket实例触发open事件。它称为客户端和服务器之间的初始握手。当建立连接就引发的事件被称为onopen

      onopen是指客户端和服务器之间的初始握手。

      扫描二维码关注公众号,回复: 10991381 查看本文章
    2. 消息

      通常在服务器发送一些数据时发生消息事件。服务器发送给客户端的消息可以包括纯文本消息,二进制数据或图像。无论何时发送数据,都会触发onmessage函数。

      此事件充当客户端对服务器的耳朵,每当服务器发送数据时,都会触发onmessage事件。

    3. 关闭

      关闭事件标志着服务器和客户端之间通信的结束。在onclose事件的帮助下,可以关闭连接。在onclose事件的帮助下标记通信结束后,服务器和客户端之间无法进一步传输消息。关闭事件也可能由于连接不良而发生。

    4. 错误

      某些错误的错误标记,在通信期间发生。它是在onerror事件的帮助下标记的。在错误之后总是会终止连接。

      事件实现 作用
      onLoad 创建对象初始化连接
      onOpen 与服务器建立连接,并发送状态
      onMessage 显示信息
      onSend 向服务器发送消息
  • websocket操作

    支持两个主要操作:

    1. send()

      只有在连接打开时才可以发送消息。

    2. close()

      握手再见,终止连接。

  • websocket的生命周期

    1. 创建连接

      创建websocket连接非常简单:调用websocket构造函数并传入服务器的URL

  • websocket与restful

    websocketrestful并列存在,但仔细区分,restful是基于http协议的api,实际上websocket直接对应的是httpwebsockethttp都是协议,因此会有一个概念对应偏差。

    restful下,所有HTTP通信都由客户端引导。

  • websocket与websockets

    在代码中能看到这两个包:

    import websocket  # 是一个websocket服务的client端模块,websocket-client
    import websockets # 同时包含server端和client端
    

    就订阅数据来说,先用websocket就可以了。

  • websocket-client(websocket)

    github上有基础用法介绍。

  • websockets(官网 易百教程)

    参见易百教程。

  • References

  1. websocket-client(websocket)和websockets区别
  2. Python3+WebSockets实现WebSocket通信
  3. WebSocket - 基于 Python 的主流实现方式总结
  4. WebSocket 详解教程
发布了880 篇原创文章 · 获赞 1331 · 访问量 98万+

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/105646308