问题描述
因此,这里的主要目标是通过构建WebSocket客户端来连接到Bitfinex WebSocket。我想开始接收信息流(价格,交易等)。问题在于,在这个阶段,我什至不能订阅特定的货币对。换句话说,我正在向WebSocket服务器发送信息请求,但没有收到任何响应,因此我无法弄清楚为什么这样做。我的代码在下面。
这是主要方法
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.
}
}
这是MyStompSessionHandler
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 + '\'' +
'}';
}
解决方法
我查看了Bitfinex website,但没有发现任何证据表明支持STOMP。他们只有一个REST和一个WebSocket API。因此,无法从客户端使用STOMP。