学习经验] Python 优秀库推荐 -- websocket-client
最编程
2024-03-08 19:05:00
...
websocket-client 是一个在 Python 中广泛使用的库,用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍,可以看看我之前写的文章哦!
【学习心得】websocket协议简介并与http协议对比http://t.****img.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 对象的相关事件:
事件 | 事件回调函数 | 描述 |
open | on_open | 连接建立时触发 |
message | on_message | 客户端接收到服务器数据时触发 |
error | on_error | 通信发生错误时触发 |
close | on_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()
推荐阅读
-
刘韧工作手册(2023年版)-17 共同学习,共同进步,搭建共识。一起工作的基础,是对彼此能力的认可,继续一起工作的基础,是能力的共同提高。共同进步的基础,就是共同学习,共同学习的基础,是看过同样的书。 年轻时,男女谈恋爱,双方世界观趋同,差距不大。后来,世界观逐渐拉大,对话成了鸡同鸭讲,我讲,你听不懂。你讲,我不感兴趣,甚至闹离婚,双方自然而然走不下去了。工作也一样,同事间如果差距越来越大,最终,无法一起工作。 我为了和别人搭建共识,会处心积虑向其推荐读书。听什么歌,观什么电影,看什么书,能在一定程度了解一个人。 有人说,金庸的书是文学。我说,那是娱乐。文学是“真、善、美”,首先是要“真”,就是情感真实。而在金庸的小说里,类似“九阴真经”、“葵花宝典”的秘籍是假的,小说里的人物寻得秘籍,一夜之间就能武功猛增……这样的情节,在现实中可能吗?生活中,漂亮的富家女黄蓉会爱上傻小子郭靖吗?金庸看多了,人会追求走捷径,工作生活“走捷径”会害死自己。 18 礼物,是人际交往中的情感润滑剂。互相送礼物,增进感情。不知道买什么,就买吃的。 英国人做客,会送主人红酒、鲜花和小卡片,回家后,会写感谢信。在新加坡,朋友们来家,常带些做好的熟食,大家一起吃。 2000年,我听说谷歌在办公室给员工备吃的。当时不太理解,后来才知道,“在一起吃”这个行为,有助于消除紧张和敌意,人更容易感到温暖和轻松,更愿意敞开心扉,是社交中增进感情的好方式之一。脸书新加坡总部,午餐,公司会请高级厨师做六种风格的菜,每一道菜都做的极好,甚至比五星级酒店的饭菜都好吃。他们的员工告诉我,根本不想回家,就想在公司吃饭。 19 坦诚,不装懂,打破沙锅问到底。想当然半天,不如简单试一下。要学会积攒各种低成本测试方法,并勤快地去试。超大额跨国汇款,先汇1元,测试路径是否畅通。没有招,没有策略库,一筹莫展。 有句古话,叫“以其昏昏,使人昭昭”。很多人对“学而优则仕”这句话的理解,是典型的“以其昏昏,使人昭昭”。这句话常被人解释为“学习好了就去当官”,若照此解释,下一句“仕而优则学”只能解释为“当官当好了就去学习”!这显然说不通。这里的“优”,不是“优秀”,而是“空闲”的意思。很多人不清楚,却到处教人解释这句话。 《水浒传》是中国版的黑帮小说,讲的是厚黑学,没有道德底线。梁山人为了拉扈三娘入伙,杀光了她全家,把原本是千金小姐,花容月貌的扈三娘指婚丑陋的王英。直到今天,《水浒传》常被解释为“侠义”。 在群里,遇到信口雌黄国学的人,我会问他们,论语中,第一句话“学而时习之不亦说乎”中的“习”是什么意思?很多人解释为“复习”。其实,繁体字中,“习”的写法是“習”,下面一个“白”,上面一个“羽”,指的是“雏鸟学飞”。意思是,雏鸟利用老鸟教的技巧,终于飞起来了。因此,“习”的本意是指老师手把手把心得教给你,让你学会了,有了收获和进步,绝不是指反复“复习”和“练习”的意思。 维特根斯坦说:“凡是可说的就要说清楚,凡是不可说的就该保持沉默。”别不懂装懂。 20 善待帮助你的人。一个人能否成功,要看有没有人愿意帮你。有多大成功,要看有多少人愿意帮你。 别人发现你出错了,提醒你,这些都是你所能得到的“举手之劳”的帮助,你知道了,能改掉,你容易成长。 如何做一个有很多人愿意帮你的人呢? 首先,滴水之恩,当涌泉相报。每次收到礼物,我一定会表示感谢。 其次,得到帮助,一定要反馈。很多帮助不一定非得要你用物质来交换,可能仅仅是你要领情。我会记录所有受到的帮助,并广而告之。我写书时,会把帮助我的人都列举出来,这样做成本不高,但被提到的人会感动。 你们可以回忆一下,有多少人帮过你?如果脱口说出的人数越多,说明你离成功越近。要是发现世界上,愿意帮你的人只有父母,那就要反思了。(完) 刘韧商业写作通识
-
学习经验] Python 优秀库推荐 -- websocket-client
-
实用 tip:国外优秀自修日语网站推荐与学习经验分享