You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket调用unsubscribe遇1006异常,程序中断问题求助

原因分析
  1. 1006错误本质:这是WebSocket的异常关闭码,意味着连接在未完成正常关闭流程时被强制断开。问题出在KucoinWsClient的后台逻辑——调用unsubscribe后,客户端可能直接关闭了连接,但后台负责监听消息的协程还在运行,协程抛出未捕获的异常导致程序崩溃。
  2. try-except覆盖范围有限:你只捕获了unsubscribe方法本身的异常,但WebSocket客户端的后台任务(比如消息接收协程)抛出的异常不在当前try块范围内,所以程序依然会终止。
  3. 消息处理函数潜在风险:如果deal_futures_msg在处理消息时抛出未捕获的异常,也会导致后台协程崩溃,进而引发连接异常关闭。

解决方案

1. 捕获WebSocket客户端全局异常

给事件循环设置全局异常处理器,避免未捕获的异常终止程序:

import asyncio

def handle_loop_exception(loop, context):
    err_msg = context.get("exception", context["message"])
    print(f"事件循环异常: {err_msg}")

async def main():
    loop = asyncio.get_event_loop()
    loop.set_exception_handler(handle_loop_exception)
    # 原main函数逻辑...

如果SDK支持异常回调参数,修改订阅函数:

async def subscribe_to_spot_topic(client, topic, order_book):
    def handle_client_exception(e):
        print(f"WebSocket客户端异常: {e}")
    
    ws_client = await KucoinWsClient.create(
        None, 
        client, 
        lambda msg: deal_futures_msg(order_book, msg), 
        private=False,
        on_exception=handle_client_exception  # 假设SDK支持该参数,以实际文档为准
    )
    try:
        await ws_client.subscribe(topic)
        return ws_client
    except Exception as e:
        print(f"订阅出错: {e}")

2. 完整关闭WebSocket客户端

不要只调用unsubscribe,需调用客户端的close方法(如果存在),确保后台协程被正确终止:

async def unsubscribe_to_spot_topic(ws_client: KucoinWsClient, topic):
    if ws_client is not None:
        try:
            await ws_client.unsubscribe(topic=topic)
            await ws_client.close()  # 调用客户端关闭方法,终止后台任务
            await ws_client.wait_closed()  # 等待连接完全关闭(如果SDK支持)
            print("成功取消订阅并关闭WebSocket连接")
        except Exception as e:
            print(f"取消订阅/关闭失败: {e}")
    else:
        print("WebSocket客户端未正确初始化")

3. 给消息处理函数添加异常捕获

确保deal_futures_msg不会因处理消息抛出未捕获的异常:

def deal_futures_msg(order_book, msg):
    try:
        # 原消息处理逻辑
        pass
    except Exception as e:
        print(f"消息处理出错: {e}")

内容的提问来源于stack exchange,提问作者Paucar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:25:27