WebSocketClient 类:多账户订单订阅实现
根据代码,每次调用WebSocketConfig.loginConnect(webSocketClient, apikey, passphrase, secretkey)方法时,会建立一个新的WebSocket连接,并使用最后一个账户的信息进行登录验证。这导致之前建立的WebSocket连接会被覆盖,只有最后一个账户的连接是有效的。
如果需要多个账户的订单都建立连接,可以修改代码逻辑,将每个账户的连接保存起来,然后在需要订阅频道时,遍历所有的连接进行订阅。
首先,修改WebSocketClient类,将WebSocket连接保存到一个集合中:
public class WebSocketClient {
// ...
private static List<WebSocket> webSockets = new ArrayList<>();
public static void addWebSocket(WebSocket webSocket) {
webSockets.add(webSocket);
}
public static void removeWebSocket(WebSocket webSocket) {
webSockets.remove(webSocket);
}
// ...
}
然后,在OrderSubscribeServiceImpl类中,保存每个账户的WebSocket连接:
@Slf4j
@Service
public class OrderSubscribeServiceImpl implements OrderSubscribeService {
// ...
private Map<String, WebSocket> webSocketMap = new HashMap<>();
@Override
public void orderSubscribe(String apikey, String secretkey, String passphrase) {
// ...
WebSocket webSocket = WebSocketConfig.loginConnect(webSocketClient, apikey, passphrase, secretkey);
webSocketMap.put(apikey, webSocket);
// ...
}
@Override
public void subscribe(String apikey, String secretkey, String passphrase) {
// ...
WebSocket webSocket = WebSocketConfig.loginConnect(webSocketClient, apikey, passphrase, secretkey);
webSocketMap.put(apikey, webSocket);
// ...
}
// ...
}
最后,在需要订阅频道的地方,遍历所有的WebSocket连接进行订阅:
for (WebSocket webSocket : webSocketMap.values()) {
WebSocketClient.subscribe(channelLists, webSocket);
}
这样就可以保证多个账户的订单都建立了连接,并订阅了相应的频道。
原文地址: https://www.cveoy.top/t/topic/o9Dr 著作权归作者所有。请勿转载和采集!