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

WebSocket无法建立连接:on_open事件失效及ws参数疑问

问题
  1. 尝试用WebSocket替代REST API,但on_open事件始终不触发,一段时间后只会收到on_close事件,脚本无报错直接结束
  2. 不清楚on_open方法里的ws参数是什么,以及它的定义位置

示例代码

import websocket
import threading
import _thread
import json

class SocketConn(websocket.WebSocketApp):
  def __init__(self, url, params=[]):
    super().__init__(url=url, on_open=self.on_open)

    self.params = params
    self.on_message = lambda ws, msg: self.message(msg)
    self.on_error = lambda ws, e: print('Error', e)
    self.on_close = lambda ws: print('Closing')

    self.run_forever()

  def on_open(self, ws,):
    print('Websocket was opened')

    def run(*args):
      tradeStr = { "method":"SUBSCRIPTION", "params":self.params }

      ws.send(json.dumps(tradeStr))

    _thread.start_new_thread(run, ())

  def message(self, msg):
    print(msg)


threading.Thread(target=SocketConn, args=('wss://wbs.mexc.com/ws',["spot@public.deals.v3.api@BTCUSDT"])).start()
解决方案与解释

一、解决on_open不触发的问题

1. 修复端点与SSL配置

首先确认MEXC的WebSocket端点是否正确,建议替换为官方标准端点(如wss://wbs.mexc.com/ws/v3)。同时添加SSL选项避免证书验证阻碍连接:

# 需先导入ssl模块
import ssl

# 修改run_forever调用
self.run_forever(sslopt={"check_hostname": False, "cert_reqs": ssl.CERT_NONE})

2. 增强错误排查

当前错误处理过于简略,修改为详细输出以便定位问题:

self.on_error = lambda ws, e: print(f'错误详情: {type(e).__name__} - {str(e)}')

通过具体错误信息可快速判断是连接超时、DNS失败还是端点不存在等问题。

3. 调整线程逻辑

子类__init__中直接调用run_forever(),同时外层用threading.Thread包裹实例化,会导致线程嵌套冲突。可二选一:

  • 去掉外层threading.Thread,直接执行SocketConn('wss://wbs.mexc.com/ws/v3',["spot@public.deals.v3.api@BTCUSDT"])
  • 将run_forever()移到独立线程中执行,避免重复嵌套

4. 修正订阅格式

MEXC的WebSocket订阅方法名应为SUBSCRIBE而非SUBSCRIPTION,修改订阅消息:

tradeStr = { "method":"SUBSCRIBE", "params":self.params }

二、ws参数的解释

  • ws是当前的WebSocketApp实例对象,由websocket库在触发on_open事件时自动传入。
  • 它的定义在websocket库的内部实现中,连接成功建立后,库会创建该实例并传递给on_open方法,你无需手动定义,只需在方法参数中接收即可。
  • 通过这个ws实例,你可以调用send()发送消息、close()关闭连接等操作,实现对WebSocket连接的控制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:36:32