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

Java使用binance4j开发币安机器人如何终止websocket退出事件处理器

实现方法

binance4j的websocket客户端基类自带连接关闭方法,配合JDK线程同步工具即可实现需求,核心逻辑分两点:

  • 直接在回调中调用客户端实例的close()方法,即可主动断开websocket连接,自动注销所有事件处理器,不会再接收后续推送消息。
  • websocket客户端默认是异步非阻塞模式,open()方法不会阻塞主线程,要在连接关闭后把执行权交回主函数,使用CountDownLatch做线程同步等待即可。

修正后可直接运行的代码

import java.util.concurrent.CountDownLatch;
// 自行引入项目中对应的binance4j、K线间隔类依赖

public class Timer {
    private static final String SYMBOL = "btcusdt".toUpperCase();

    public Timer(CandlestickInterval interval) throws InterruptedException {
        WebsocketCandlestickClient client = new WebsocketCandlestickClient(SYMBOL, interval);
        CountDownLatch exitLatch = new CountDownLatch(1);

        // 注意:先注册消息监听再打开连接,避免漏收连接初期的推送消息
        client.onMessage(cb -> {
            if (cb.getIsBarFinal()) {
                // 此处可写入K线收盘后需要执行的业务逻辑
                // 关闭websocket连接
                client.close();
                // 唤醒等待的主线程
                exitLatch.countDown();
            }
        });

        client.open();
        // 阻塞当前线程,直到收到收盘K线、连接关闭后才继续向下执行
        exitLatch.await();
    }
}

补充说明

  • 如果不需要主线程同步等待K线收盘结果,仅需在条件满足时断开连接,去掉CountDownLatch相关逻辑,直接在回调里调用client.close()即可。
  • close()方法会自动释放底层连接资源,移除所有注册的事件监听,不会出现内存泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:15:42