【学习心得】Python好库推荐——websocket-client

        websocket-client 是一个在 Python 中广泛使用的库,用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍,可以看看我之前写的文章哦!

【学习心得】websocket协议简介并与http协议对比icon-default.png?t=N7T8http://t.csdnimg.cn/C3hEQ

一、安装和快速入门

pip install websocket-client

两个基本的使用示例来说明如何创建一个 WebSocket 客户端、连接到服务器、发送消息。

(1)websocket短连接

# 安装websocket-client库
# pip install websocket-client

# 导入websocket
import websocket

# 创建客户端实例
ws = websocket.WebSocket()

# 连接指定的ws服务器
ws.connect("ws://echo.websocket.events")   # 这个网址是官方测试网址

# 发送消息
ws.send("Hello!")
# print(ws.send("Hello!"))  # 返回的是你发送信息的字节大小,并不是真的服务器响应给你的数据

# 接收响应
res = ws.recv()
print(res)  # recv方法才能得到服务器响应给你的数据

# 关闭ws连接
ws.close()

(2)websocket长连接

# 导入websocket-client包
import websocket


# 定义on_message回调函数用来处理 websocket事件——客户端接收服务端数据时触发
def on_message(ws_app, message):
    print(message)  # 当客户端接收到服务器响应回的数据时,把他打印出来显示一下


# 实例化一个ws客户端
url = "wss://testnet-explorer.binance.org/ws/block"
ws = websocket.WebSocketApp(url=url, on_message=on_message)  # 传入的是回调函数所以不要小括号

# 开启ws长连接
# 启动一个无限循环,保持WebSocket连接的持续开放状态,并监听来自服务器的数据流。
# 当有新的消息到达时,将通过 on_message 回调函数处理这些消息。
ws.run_forever()

二、websocket的所有事件介绍

WebSocket 对象的相关事件:

事件事件回调函数描述
openon_open连接建立时触发
messageon_message客户端接收到服务器数据时触发
erroron_error通信发生错误时触发
closeon_close连接关闭时触发
# 导入websocket-client库
import websocket


# 定义on_message事件回调函数
def on_message(ws_app, message):
    print("接收到服务器响应:", message)


# 定义on_error事件回调函数
def on_error(ws_app, error):
    print(error)


# 定义on_open事件回调函数
def on_open(ws_app):
    print('已连接到WebSocket服务器')


# 定义on_close事件回调函数
def on_close(ws_app):
    print('已关闭和WebSocket服务器的连接')


# 实例化一个ws客户端
url = "ws://echo.websocket.events"
ws = websocket.WebSocketApp(
    url=url,
    on_open=on_open,
    on_message=on_message,
    on_error=on_error,
    on_close=on_close,
)

# 开启长连接,开始监听
ws.run_forever()

# 发送信息
ws.send("hello!")

# 关闭连接
ws.close()

三、如何主动退出长连接?

"""
设置一个退出标志:
在运行 run_forever() 的外部定义一个全局变量作为退出标志,
并在需要关闭连接的地方将其设置为True。
然后,在 on_message() 或其他回调函数(如 on_error()、on_close() 等)中检查这个标志,
当满足特定条件或接收到信号时调用 ws_app.close()。
"""
import websocket


should_close = False


def on_message(ws_app, message):
    print(message)
    # 检查是否需要关闭连接
    if should_close:
        ws_app.close()


ws = websocket.WebSocketApp(
    "wss://testnet-explorer.binance.org/ws/block", 
    on_message=on_message
)


# 当你需要关闭连接时
def close_websocket():
    global should_close
    should_close = True
    ws.close()


# 开始监听
ws.run_forever()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文了解Spring的SPI机制

文章目录 一文了解Spring的SPI机制Java SPIServiceLoader Spring SPISpringboot利用Spring SPI开发starter 一文了解Spring的SPI机制 Java SPI SPI 全称 Service Provider Interface ,是 Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用…

Webpack学习记录

记录学习笔记,欢迎指正 1.大型项目为什么需要打包 1.1 使用打包工具原因 编译或转译文件: 项目中可能用到ES6语法,可能有浏览器不支持。需要打包工具将代码编译输出为ES5语法的代码。项目中可能使用Sass,Less等预处理器&#xff…

【微服务】nacos注册中心

Nacos注册中心 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 1.1.认识和安装Nacos Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在…

Python collections模块

collections 模块是Python标准库中提供的一个模块,用于提供一些额外的数据容器和工具,扩展了内置的数据类型。它包含了一些有用的类和函数,用于处理各种数据结构和算法问题。下面是 collections 模块中常用的几个类的详细介绍: 1.…

【数学】【位运算】LeetCoce810. 黑板异或游戏

作者推荐 视频算法专题 本文涉及知识点 数学 位运算 LeetCoce810. 黑板异或游戏 黑板上写着一个非负整数数组 nums[i] 。 Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话…

代码随想录day19(1)二叉树:完全二叉树节点个数(leetcode222)

题目要求:求一个完全二叉树的节点个数 思路:首先完全二叉树可以用普通二叉树的方法来求,但是需要遍历所有的节点。 但是对于完全二叉树来说,只有最底层右侧的节点可能没满,其余每层节点都达到了最大值。所以我们可以…

浏览器同源策略及跨域问题

同源策略:同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。 同源策略的作用:保护浏览器中网站的安全,限制ajax只…

YOLO v8:目标检测的最新王者

本文来自公众号“AI大道理” —————— Yolov8是Yolo系列模型的最新王者,各种指标全面超越现有目标检测模型。 Yolov8借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,全面改进了Yolov5模型结构,同时保持了Yolov5工程化简洁易用的优势。 …

为什么要用scrapy爬虫库?而不是纯python进行爬虫?

为什么要用scrapy爬虫库?而不是纯python进行爬虫? Scrapy的优点Scrapy节省的工作使用纯Python编写爬虫的不足 Scrapy是一个使用Python编写的开源和协作的web爬虫框架,它被设计用于爬取网页数据并从中提取结构化数据。Scrapy的强大之处在于其广…

IBFKJ-299 8AI/AO,DI/DO开关量模拟量同时数据采集

产品特点: ● DC12-30V宽压供电; ● RS485通讯光电隔离,输入光耦隔离,继电器输出触点隔离; ●通讯接口支持RS232、RS485; ●支持标准Modbus RTU/TCP/ASCII协议 ●具有闪开、闪断功能,可以在…

C#操作像素替换图片中的指定颜色

待处理的图片,其特征是包含有限数量颜色,不同的颜色相互交叉使用,相同颜色并未完全连贯,需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作,最后还是自己动手编写简单的处理程序。   程序的…

8-图像放大

其实,就是开辟一个zoomwidth,zoomheight的内存,再分别赋值即可。 void CDib::Maginify(float xZoom, float yZoom) { //指向原图像指针 LPBYTE p_data GetData(); //指向原像素的指针 LPBYTE lpSrc; //指向缩放图像对应像素的指针 LPBYTE l…

当word表格复制到excel出现分行问题的解决小技巧

在word文档中将^p(回车符号)替换成其他,比如 全选复制粘贴到excel中后分行问题已经解决,将换回原本的回车即可,ctrshiftj(回车)

新零售SaaS架构:什么是线上商城系统?

零售商家为什么要建设线上商城 传统的实体门店服务范围有限,只能吸引周边500米内的消费者。因此,如何拓展服务范围,吸引更多消费者到店,成为了店家迫切需要解决的问题。 缺乏忠实顾客,客户基础不稳,往往是…

Git提交代码进入coding

安装Git后建一个文件在文件里右键点击Git Bash使用命令配置用户名和邮箱git config --global user.name "你的用户名"和git config --global user.email "你的邮箱"命令git init来初始化,自动将当前仓库设置为master创建一个项目(一…

Linux - 安装 nacos(详细教程)

目录 一、简介二、安装前准备三、下载与安装四、基本配置五、单机模式 一、简介 官网:https://nacos.io/ GitHub:https://github.com/alibaba/nacos Nacos 是阿里巴巴推出的一个新开源项目,它主要是一个更易于构建云原生应用的动态服务发现…

什么是接口

接口定义 接口的定义分为接口的声明和接口体 接口构成 接口声明: ① 声明:关键字interface ② 格式:interfac接口名字 接口体 ① 两部分:常量和方法定义。 ② 内容:仅声明抽象方法, 不实现方法(没有方法体…

如何实现幂等性,java多线程面试题及答案整理

订单创建接口,第一次调用超时了,然后调用方重试了一次。是否会多创建一笔订单? 订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次。是否会多扣一次库存? 当这笔订单开始支…

【单调栈】代码随想录算法训练营第五十九天 |503.下一个更大元素II, 42. 接雨水 (待补充)

503.下一个更大元素II 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个…

使用R语言计算模拟二项分布

二项分布理论 二项分布是一种离散概率分布,描述了在n次独立重复的伯努利试验中成功的次数的概率分布。其中,每次试验的结果只有两个可能:成功或失败,且每次试验的成功概率p是相同的。 具体来说,如果随机变量X表示在n次…