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

NestJS连接Binance WebSocket API失败:无法输出连接日志求助

解决NestJS连接Binance WebSocket API失败的问题

你代码里的核心问题有两个:

  • Binance的WebSocket API不支持Socket.io协议,socket.io-client是专门用于连接Socket.io服务端的工具,和原生WebSocket协议不兼容
  • 你连接的地址是Binance的REST API地址(https://api.binance.com),WebSocket服务的正确地址是wss://stream.binance.com:9443这类

下面给出两种可行的实现方式:

方法一:使用原生WebSocket(基于ws库)

首先安装依赖:

npm install ws

然后修改NestJS服务代码:

import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import * as WebSocket from 'ws';

@Injectable()
export class BinanceGateway implements OnModuleInit, OnModuleDestroy {
  private wsClient: WebSocket;

  onModuleInit() {
    // 示例连接BTCUSDT的实时交易流,可根据需求替换端点
    this.wsClient = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade');

    this.wsClient.on('open', () => {
      console.log('connected to the binance');
      // 若需订阅自定义流,可在此发送JSON格式的订阅指令
    });

    this.wsClient.on('message', (data) => {
      const parsedData = JSON.parse(data.toString());
      console.log('收到Binance数据:', parsedData);
    });

    this.wsClient.on('error', (err) => {
      console.error('Binance WebSocket连接错误:', err);
    });

    this.wsClient.on('close', () => {
      console.log('Binance WebSocket连接关闭');
    });
  }

  onModuleDestroy() {
    // 模块销毁时主动关闭连接,避免资源泄漏
    if (this.wsClient) {
      this.wsClient.close();
    }
  }
}

方法二:使用官方封装的SDK(更简便)

使用binance-api-node库,它已经封装了Binance的WebSocket和REST API,无需手动处理连接细节:

首先安装依赖:

npm install binance-api-node

然后编写服务代码:

import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';
import Binance from 'binance-api-node';

@Injectable()
export class BinanceGateway implements OnModuleInit, OnModuleDestroy {
  private binanceClient;
  private streamSubscription;

  onModuleInit() {
    // 创建客户端(如需API密钥,可传入{ apiKey: 'xxx', apiSecret: 'xxx' })
    this.binanceClient = Binance();

    // 订阅BTCUSDT的实时交易流
    this.streamSubscription = this.binanceClient.ws.trades('BTCUSDT', (tradeData) => {
      console.log('收到交易数据:', tradeData);
    });

    console.log('connected to the binance');
  }

  onModuleDestroy() {
    // 取消订阅,释放资源
    if (this.streamSubscription) {
      this.streamSubscription.unsubscribe();
    }
  }
}

额外注意点

  • Binance提供多种WebSocket流端点(行情、深度、K线等),可根据业务需求替换对应的端点路径
  • 确保你的NestJS模块已经注册了这个服务,否则onModuleInit生命周期钩子不会执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:05:14