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

无法连接IBM Watson语音转文本WebSocket,请求协助修正

解决WebSocket连接失败:"Failed to open WebSocket" 问题

看起来你遇到的核心问题是WebSocket连接根本没建立起来,后续调用close()时才触发了追踪错误。结合你怀疑的ws_url问题,我们一步步来排查:

1. 优先确认WebSocket URL的正确性

这是最常见的触发原因,你可以从这几点逐一检查:

  • 确保URL以ws://(非加密)或wss://(加密)开头,绝对不能用http://或https://——这是新手常踩的坑
  • 核对端点路径的拼写细节:比如服务器上的端点是/stt/ws,你不能写成/stt或者/STT/ws(大多数服务器路径是大小写敏感的)
  • 手动测试连通性:用curl命令模拟握手请求,替换成你的目标URL:
    curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: test-key" ws://your-ws-url-here
    
    如果返回HTTP/1.1 101 Switching Protocols,说明URL和服务器端点是正常的;如果返回404/500之类的状态码,那就是URL或服务器配置存在问题

2. 调整ws4py客户端的使用逻辑

从你的错误栈来看,调用stt_client.close()时出错,大概率是因为连接从未成功建立。你可以调整代码,先确保连接成功再执行后续操作:

from ws4py.client.threadedclient import WebSocketClient

class STTWebSocketClient(WebSocketClient):
    def opened(self):
        print("✅ WebSocket连接成功建立")
        # 这里可以添加发送初始化消息等业务逻辑
    
    def closed(self, code, reason):
        print(f"🔌 连接关闭:代码={code},原因={reason}")
    
    def received_message(self, msg):
        print(f"📥 收到消息:{msg}")

try:
    # 替换成你验证后的正确URL
    ws_url = "ws://your-valid-server-url:port/endpoint"
    stt_client = STTWebSocketClient(ws_url)
    stt_client.connect()
    
    # 这里可以添加业务逻辑,比如等待消息或发送数据
    # stt_client.send("Hello Server")
    
    # 确保连接建立后再执行关闭操作
    stt_client.close()
except Exception as e:
    print(f"❌ 连接失败:{str(e)}")

这样如果连接失败,会在except块里直接捕获到具体原因,而不是到close环节才报错。

3. 排查网络环境干扰

  • 本地防火墙或杀毒软件可能拦截了WebSocket连接,暂时关闭测试看看是否能成功
  • 如果是在公司网络下,可能需要配置代理服务器。ws4py支持通过初始化参数指定代理,比如:
    stt_client = STTWebSocketClient(ws_url, proxy_host="your-proxy-host", proxy_port=8080)
    

4. 检查服务器端状态

  • 确认WebSocket服务器正在运行,并且监听了你指定的端口
  • 查看服务器日志,是否有收到连接请求但被拒绝的记录(比如权限验证失败、端点未注册等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:33:01