首页 > 编程语言 >python的websocketAPP

python的websocketAPP

时间:2023-08-15 19:56:42浏览次数:57  
标签:None 调用 websocket 函数 python close websocketAPP data

一.websocket简介及安装

使用pip命令安装websocket库:pip3 install websocket

websocket.WebSocketApp 是对 websocket.WebSocket 的封装,支持自动定时发送 PING 帧,支持事件驱动方式的数据帧接收,可用于长期的 WebSocket 连接。

websocket中就有建立连接connect、发送消息send等函数可供使用,但是websocket.WebSocketApp将这些都封装好了,只用在实例化的时候传入自定义函数即可,更方便。因此这里选择使用websocket.WebSocketApp来模拟客户行为。

WebSocketApp也是websocket中的一个类。要使用WebSocketApp中的回调函数需要传入一系列的可调用对象。在实例化该类时传入构造函数中的on_open、on_message、on_error就需要传入一系列的可调用对象,例如自定义的函数。
二.方法

  运行WebSocketApp的事件循环,先创建webSocket对象,然后connect连接服务器,之后一直循环运行接收数据帧,回调对应函数处理数据帧;当websocket客户端被关闭后,将调用on_close()方法然后结束循环返回;当循环中发生异常时被捕捉,然后依次调用on_error(),on_close()方法,然后结束循环返回。

2.1 WebSocketApp 构造方法
class websocket.WebSocketApp(
  url,
  header=None,
  cookie=None,
  on_open=None,
  on_data=None,
  on_message=None,
  on_cont_message=None,
  on_ping=None,
  on_pong=None,
  on_error=None,
  on_close=None,
  get_mask_key=None,
  subprotocols=None)

参数说明:

on_:开头的参数均为事件回调函数

url:websocket服务端的URL

header:连接握手时自定义的HTTP请求头

cookie:连接握手时自定义的HTTP请求头的Cookie的值

on_open:websocket连接成功后调用的函数,只调用一次,函数格式 on_open(wsapp)

on_data:接收TEXT,BINARY或CONT数据帧时调用,on_data被调用后on_message或on_cont_message也会被调用。函数格式为:                                 on_data(wsapp,frame_data,frame_opcode,frame_fin)

on_message:接收到TEXT或BINARY数据帧时调用,函数格式为:on_message(wsapp,data)

on_cont_message:接收到CONT数据帧时调用,函数格式为:on_cont_message(wsapp,frame_data,frame_fin)

on_ping:接收到PING数据帧时调用,不会自动回复PONG,需要手动发送PONG回复服务端,函数格式为:on_ping(wsapp,frame_data)

on_pong:接收到PONG数据帧时调用,函数格式为on_pong(wsapp,frame_data)

on_error:当事件循环中有任何异常抛出,将调用此函数,然后调用on_close()关闭WebSocket连接,然后返回run_forever()。on_xxx回调方法中抛出                的异常将被吧捕获,不会抛给run_forever(),函数格式为:on_error(wsapp,exception)

on_close:websocket被关闭时调用的函数。事件循环中抛出异常或收到服务端推送的close数据帧关闭客户端时被调用,主动调用wsapp.close()不会                 调用on_close(),函数格式为:on_close(wsapp,close_status_code,close_reason)

get_mask_key:自定义mask key的生成函数

subprotocols:可用的子协议数组

2.2run_forever()方法

run_forever(sockopt=None,       #socket.setsocket的可选参数值,为tuple类型

  sslopt=None,     #SSL socket的可选参数,为dict对象,例如禁用 SSL 证书校验: sslopt={"cert_reqs": ssl.CERT_NONE} 禁用域名校验: sslopt={"check_hostname": False}

  ping_interval=0,   #自动发送ping数据帧的间隔秒数,默认为0,表示不自动发送ping

  ping_timeout=None,  #ping发送后接收pong的超时秒数,如果超时未收到pong则抛出异常并调用on_error(),on_close(),然后结束循环;None表示不检测超时
  ping_payload="",    #发送PING数据帧时携带的数据,默认为空字符串
  proxy_type=None,  #代理的类型,默认http,其他还有socket4,socket5和socks5h
  http_proxy_host=None,    #代理的host
  http_proxy_port=None,    #代理的端口,默认80
  http_no_proxy=None,,     #不适用代理的host names,为list类型,如["host1","host2",.....]
  http_proxy_auth=None    #HTTP代理认证为tuple类型,如("username","password")
  skip_utf8_validation=False,    #是否跳过utf8校验
  host=None,       #自定义http请求头host的值
  origin=None,      #自定义http请求头origin的值(URL)
  dispatcher=None,    #自定义从socket读取数据的函数
  suppress_origin=False)     #抑制输出origin header
2.3发送数据send()方法

send(data, opcode=ABNF.OPCODE_TEXT)

data:发送的数据,为str/bytes类型

opcode: 操作码, 可选值:
  ABNF.OPCODE_CONT
  ABNF.OPCODE_TEXT
  ABNF.OPCODE_BINARY
  ABNF.OPCODE_CLOSE
  ABNF.OPCODE_PING
  ABNF.OPCODE_PONG
 默认为发送 TEXT 数据帧

2.4关闭websocket方法close()close(status=STATUS_NORMAL, reason=bytes('', encoding='utf-8'), timeout=3.0)

关闭 WebSocket, 先发送关闭帧再关闭底层 socket。

status: 发送关闭数据帧时的数据(告诉服务端关闭的状态码), 默认为正常关闭。

reason: 发送关闭数据帧时的数据(告诉服务端关闭的原因)。
timeout: 直到超时还没有收到一个关闭帧, 则不再等待, 直接关闭底层 socket。
正常为收到关闭帧后再关闭底层 socket。int/float 秒数, None 表示一直等待直到收到一个关闭帧。
实例:

 

 

 

 

 

三.webSocketApp方法

 

标签:None,调用,websocket,函数,python,close,websocketAPP,data
From: https://www.cnblogs.com/qq771293871/p/17628285.html

相关文章

  • Python | 文件、异常模块与包
    1.文件1.1文件编码编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。计算机常用编码:UTF-8GBKBig5UTF-8是目前全球通用的编码格式除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。1.2文件的读取操作一般,文件可以分为文本文件、视频文件、音频......
  • Python小项目:利用tkinter与图灵机器人制作智能聊天系统
    文章目录1前言2代码分模块讲解2.1导入相应的库2.2创建机器人对象2.3创建信息交互过程对象2.4页面创建对象3整体代码4结语1前言在本项目中,我们将探索如何使用Python的tkinter库以及图灵机器人API来构建一个智能聊天系统。本项目的初衷是通过实际操作,结合GUI编程和API调用......
  • Python小项目:利用tkinter搭建粗糙集简约算法软件
    文章目录1前言2粗糙集简约算法简述2.1基本概念2.2算法原理2.3应用领域3实验详解3.1实验数据3.2实验说明及过程截图3.3实验结果4代码详解5结语完整项目下载:下载链接1前言在本次旅程中,我们将探索一个令人兴奋的主题——“Python小项目:利用tkinter搭建粗糙集简约算法软件......
  • Python小项目:利用 U-net 完成细胞图像分割
    文章目录1前言2实验概述3U-net概述4实验过程及代码5结语完整数据集下载:下载链接1前言在当今数字化时代,图像处理和分析已经成为了科学研究和技术应用领域的关键部分。在生物医学领域,图像分析对于诊断、治疗和疾病研究具有重要意义。本项目将带您深入了解U-net细胞分割技......
  • Python小项目:利用tkinter搭建个人所得税计算器
    文章目录1前言2详细介绍3代码介绍4结语完整项目下载:下载链接1前言在当今数字化时代,个人所得税的计算对于每个人来说都是一个重要而复杂的任务。为了让个人所得税的计算变得更加便捷和直观,本实验采用了Python编程语言,并借助tkinter图形化界面库,搭建了一个实用的个人所得......
  • Python小项目:利用tkinter开发测手速小游戏
    文章目录1简介2代码分模块介绍2.1导入需要的包2.2定义全局变量2.3定义页面组件类2.4定义增加类2.5定义结束类3整体代码展示4结语1简介利用tkinter开发测手速的小游戏,大家10s内可以点击鼠标多少次呢?想测试一下吗?来试试测手速下游戏吧!仅供娱乐!试玩视频:测手速小游戏游......
  • Python小项目:利用tkinter开发AI对战井字棋游戏
    文章目录1前言2代码分模块介绍2.1导入需要的库2.2定义全局变量2.2定义玩家类2.3定义页面类2.4定义页面变化类以及玩家与AI轮流转换下子权限2.5定义判断胜负类2.6定义智能AI下子类3整体代码4结语完整项目下载:下载链接1前言在数字的世界里,古老的棋盘游戏焕发出崭新的活......
  • Python小项目:通过商品条形码查询商品信息
    文章目录1商品条形码2查询商品条形码的目的3实现步骤及代码3.1爬取网站介绍3.2python代码实现3.2.1日志模块3.2.2查询模块3.2.3运行结果4结语完整项目下载:下载链接1商品条形码平日大家会购买许许多多的商品,无论是饮料、食品、药品、日用品等在商品的包装上都会有条形码......
  • 【Python&RS】基于GDAL遥感影像分幅裁剪
    ​    随着科技的进步,遥感影像包含的信息越来越多,存储空间也变得很大,这就导致我们在处理影像时软件会非常的卡。同时目前很火的深度学习也需要对影像分割后制作样本集,所以今天给大家分享下如何使用Python的GDAL库对遥感影像进行分幅裁剪!一、导入需要的三方库   ......
  • python中 函数中的self是什么?
      self可视为类的实例,在使用类创建实例时,我们可能需要强制传入一些参数。所以一般在构造函数_init_里给实例的属性赋值。classStudent(obiect):def__init__(self,name,score):self.name=nameself.score=scoredefprint_score(self):......