Stream 无法构建Bitfinex Java客户端-未收到任何响应
因此,这里的主要目标是通过构建WebSocket客户端连接到Bitfinex WebSocket。我想开始接收信息流(价格、交易等)。问题是,在这个阶段,我甚至无法订阅特定的货币对。换句话说,我正在向WebSocket服务器发送一个信息请求,但没有收到任何响应,我无法理解这是为什么。我的代码如下 这是主要的方法Stream 无法构建Bitfinex Java客户端-未收到任何响应,stream,spring-websocket,stomp,trading,Stream,Spring Websocket,Stomp,Trading,因此,这里的主要目标是通过构建WebSocket客户端连接到Bitfinex WebSocket。我想开始接收信息流(价格、交易等)。问题是,在这个阶段,我甚至无法订阅特定的货币对。换句话说,我正在向WebSocket服务器发送一个信息请求,但没有收到任何响应,我无法理解这是为什么。我的代码如下 这是主要的方法 public class Main { public static void main(String[] args) throws ExecutionException,
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
String URL = "wss://api-pub.bitfinex.com/ws/2/";
WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
StompSessionHandler sessionHandler = new MyStompSessionHandler();
stompClient.connect(URL,sessionHandler);
new Scanner(System.in).nextLine(); // Don't close immediately.
}
}
这是myTompSessionHandler
public class MyStompSessionHandler extends StompSessionHandlerAdapter{
@Override
public void afterConnected(
StompSession session, StompHeaders connectedHeaders) {
System.out.println("New session established : " + session.getSessionId());
System.out.println("wss://api-pub.bitfinex.com/ws/2");
session.send("wss://api-pub.bitfinex.com/ws/2/", getSampleMessage());
System.out.println("Message sent to websocket server");
}
@Override
public void handleException(StompSession session, StompCommand command, StompHeaders headers, byte[] payload, Throwable exception) {
System.out.println("Got an exception:" + exception);
}
@Override
public Type getPayloadType(StompHeaders headers) {
return OutboundMessage.class;
}
private Object getSampleMessage() {
InboundMessage inboundMessage = new InboundMessage();
inboundMessage.setEvent("subscribe");
inboundMessage.setChannel("ticker");
inboundMessage.setSymbol("tBTCUSD");
return inboundMessage;
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
InboundMessage msg = (InboundMessage) payload;
System.out.println(msg.toString());
}
}
这是InboundMessage类
public class InboundMessage {
private String event;
private String channel;
private String symbol;
public InboundMessage() {
}
public InboundMessage(String event, String channel, String symbol) {
this.event = event;
this.channel = channel;
this.symbol = symbol;
}
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return "InboundMessage{" +
"event='" + event + '\'' +
", channel='" + channel + '\'' +
", symbol='" + symbol + '\'' +
'}';
}
我看了这篇文章,没有看到任何证据表明STOMP是被支持的。它们只有一个REST和一个WebSocket API。因此,使用客户的跺脚是行不通的。谢谢你,贾斯汀。你是对的。事实证明,解决办法是根本不用跺脚。仅使用WebSocket API就解决了这个问题。解决方案的代码不到10行。我将提供上述工作代码。