使用python连接dy直播间的websocket消息,竟然一会就自动断开了

使用python的websocket创建一个客户端连接直播间的消息,可是过一会就自动断开了,使用rust尝试连接也是一样的效果,过一会就自动断开了,而且报错:

我们先使用python建立一个客户端试一下:

# 导入websocket-client包
import _thread
import time

from proto.dy_pb2 import PushFrame

import websocket


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


def ping(ws):
    while True:
        obj = PushFrame()
        obj.payloadType = 'hb'
        data = obj.SerializeToString()
        ws.send(data, websocket.ABNF.OPCODE_BINARY)
        print("发送心跳......")
        time.sleep(10)


def on_message(ws_app, message):
    print(f"on_message收到消息: {message}")  # 当客户端接收到服务器响应回的数据时,把他打印出来显示一下


def on_error(ws_app, message):
    print(f"on_error收到消息: {message}")  # 当客户端接收到服务器响应回的数据时,把他打印出来显示一下


def on_close(ws_app, message, err):
    print(f"on_close收到消息:{ws_app}, {message}, err:{err}")  # 当客户端接收到服务器响应回的数据时,把他打印出来显示一下


# 实例化一个ws客户端
url = "wss://webcast5-ws-web-lf.douyin.com/webcast/im/push/v2/?room_id=7383932772924050185&compress=gzip&version_code=180800&webcast_sdk_version=1.0.14-beta.0&live_id=1&did_rule=3&user_unique_id=7614038015523297366&identity=audience&signature=fKnJeNoE8Jl1NdTb&aid=6383&device_platform=web&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F126.0.0.0+Safari%2F537.36+Edg%2F126.0.0.0"

header = {
    'cookie': 'ttwid=1%7C9SEGPfK9oK2Ku60vf6jyt7h6JWbBu4N_-kwQdU-SPd8%7C1697721607%7Cc406088cffa073546db29932058720720521571b92ba67ba902a70e5aaffd5d6',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'}
ws = websocket.WebSocketApp(url=url,
                            header=header,
                            on_open=on_open,
                            on_message=on_message,
                            on_error=on_error,
                            on_close=on_close)  # 传入的是回调函数所以不要小括号

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

再结合一下开源项目https://github.com/Sjj1024/douyin-live里面的websocket连接,可以看到我们在on_open里面有一个保持心跳的线程:

我们把这个ping的线程也加上再试试:神奇的事情发生了,不断了

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024小神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值