gpt4 book ai didi

node.js - Coinex WebSocket 市场深度 channel 有时不发送消息移除价格水平

转载 作者:行者123 更新时间:2023-12-03 12:19:24 26 4
gpt4 key购买 nike

我正在编写一个 Node.js 应用程序,它尝试使用他们的 Websocket 为 ETH-USDT 重新创建 Coinex 订单簿。我的应用程序订阅了市场深度 channel ,并在内存中保存了一份持续更新的订单簿本地副本。

我有一个可行的实现,但我注意到我的订单簿的本地副本似乎总是最终与交易所不同步。我已经运行该应用程序长达 2 小时而没有看到任何问题,但最终并且总是在我的本地副本中得到一个“陈旧”的价格水平,该价格水平在某个时候从交易所中删除。

我相当确定删除级别的 WS 消息从未发送过,因为我已经运行了多个测试,其中记录了在测试期间发送的每条 WS 消息。我可能可以排除我的系统存在一些错误的明显问题。

这只是 Coinex 方面的问题吗?我还需要其他方式来使消息过期吗?假设 Coinex Websocket 有问题,我如何才能最好地检测和处理这个问题?

最佳答案

您是否在使用 Coinex 的 depth.update 中的“完整结果”标志? response (即 - params[0])?服务器偶尔会发送一份完整的订单簿副本(不超过您请求中的计数限制),将此标志设置为 true .设置此标志时完全重置您的本地订单簿状态应该使您保持同步。
另一件事可能是您如何以特定价格处理 0 卷的深度更新(即 - 将该价格的值设置为 0 与从 map 中删除 key )。
这是我如何处理更新的 Java 示例( map 的大小与最初在请求中发送的计数限制保持一致):

@AllArgsConstructor
@Data
public class LimitOrderBook {
private double last;
private final SortedMap<Double, Double> asks;
private final SortedMap<Double, Double> bids;
private int time;

public void handleUpdate(final LimitOrderBookUpdate update) {
if (update.isFullUpdate()) {
asks.clear();
bids.clear();
}
last = update.getLast();
update.getAskUpdates().forEach(p -> updateMap(asks, p));
update.getBidUpdates().forEach(p -> updateMap(bids, p));
time = update.getTime();
}

private void updateMap(final SortedMap<Double, Double> map, final Pair<Double, Double> pair) {
if (pair.getValue() == 0) {
map.remove(pair.getKey());
} else {
map.put(pair.getKey(), pair.getValue());
}
}
}

关于node.js - Coinex WebSocket 市场深度 channel 有时不发送消息移除价格水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62335154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com