该教程将带您浏览用于实时外汇,加密货币和CFD(指数,股票和商品)数据的Java Websocket客户端。通过我们的外汇Java API。
尽管记事本和命令行编译器将在本教程中使用,但您可以替代您首选的开发环境。
通过启用双向实时,全双工客户端连接,Websocket为客户服务器通信的缺点提供了可行的替代品。
随着最小的延迟和低级通信,TCP连接允许客户端将数据传输到服务器,并且服务器随时将数据发送到客户端。
>是时候编码了。
必须进口一些援助图书馆。我们需要java.net.uri才能进行Websocket地址; java.net.http.httpclient与Java.net.http.Websocket库一起工作以建立与服务器的连接。消息的处理发生在java.util.concurrent.completionstage。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.WebSocket;
import java.util.concurrent.CompletionStage;
然后可以建立该计划的基本结构。我们采用连续循环来保持程序运行并注意新消息。此外,我们启动了一个新的Websocket实例,并将URL馈送到其中。您必须通过注册WebSocket密钥来创建帐户。最初的两周免费尝试我们的Java Websocket API!
public class ClientCaller {
public static void main(String[] args) throws Exception {
WebSocket ws = HttpClient
.newHttpClient()
.newWebSocketBuilder()
.buildAsync(URI.create("wss://marketdata.tradermade.com/feedadv"), new WebSocketClient(latch))
.join();
while(true){};
}
private static class WebSocketClient implements WebSocket.Listener {
//Insert Body here
}
}
创建了class websocket.listener-
中列出的三个函数之后- onopen(用于建立连接),
- onText(收到新消息时,请致电
- onerror(发生错误时调用), 现在,我们可以填写程序的详细信息。
洋葱命令
我们将我们的Websocket侦听器类添加到Onopen函数中的Websocket,然后,使用我们的用户关键,我们将消息发送到服务器(您可以通过登录从用户仪表板获取它)。此外,我们将必要的符号设置为被逗号分隔的列表(严格没有空间)。
public void onOpen(WebSocket webSocket) {
System.out.println("onOpen using subprotocol " + webSocket.getSubprotocol());
WebSocket.Listener.super.onOpen(webSocket);
webSocket.sendText("{"userKey":"INSERT_API_KEY", "symbol":"GBPUSD,EURUSD"}", true);
}
onText命令
我们从上述函数中获取外汇数据;该数据的处理将在稍后的教程中介绍。我们利用websocket.listener.super.test函数来构建和返回WebSocket接口期望的类“完整阶段返回函数”。
public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
System.out.println("onText received " + data);
return WebSocket.Listener.super.onText(webSocket, data, last);
}
方法OnError
我们可以处理OnError函数中的错误,但是我们还必须将调用送回基础Websocket。
public void onError(WebSocket webSocket, Throwable error) {
System.out.println("Bad day! " + webSocket.toString());
WebSocket.Listener.super.onError(webSocket, error);
}
我们程序的基础代码已经完成,因此让我们对其进行编译并试一试。在打开命令窗口中,导航到包含客户端代码的文件夹。运行以下命令来构建您的程序并生产a。您可以用来启动它的类文件。
javac ClientCaller.java
立即运行该程序。
java ClientCaller
现在的实时市场数据应在终端中流,如下所示。
{"symbol":"GBPUSD","ts":"1645790870117","bid":1.33881,"ask":1.33882,"mid":1.338815}
{"symbol":"GBPUSD","ts":"1645790870246","bid":1.33881,"ask":1.33881,"mid":1.33881}
{"symbol":"GBPUSD","ts":"1645790870295","bid":1.33879,"ask":1.33881,"mid":1.3388}
{"symbol":"GBPUSD","ts":"1645790870369","bid":1.33878,"ask":1.33881,"mid":1.338795}
{"symbol":"GBPUSD","ts":"1645790870441","bid":1.33878,"ask":1.3388,"mid":1.3387899}
{"symbol":"GBPUSD","ts":"1645790872080","bid":1.33877,"ask":1.3388,"mid":1.3387849}
数据蒸馏
由于货币数据为JSON格式,因此我们必须首先解析。要解析JSON,我们需要一个额外的库。为此,请将JSON解析器库复制到下载后创建类文件的同一目录。
导入库后,我们将添加代码以解析传入数据。
import org.json.*;
尽管解析很简单,但我们必须首先检查消息。我们必须首先回复“连接”通知Websocket。如果通知有数据,我们将构建一个新的JSON对象并添加消息的数据。当数据是JSON对象时,我们可以使用“ GET”命令来提取我们需要的信息。
String dataS = data.toString();
if ( !dataS.equals("Connected")) {
JSONObject obj = new JSONObject(dataS);
System.out.println(obj.getString("symbol") + " " + obj.getLong("ts") + " " + obj.getDouble("bid") + " " + obj.getDouble("ask") + " " + obj.getDouble("mid"));
}
解析数据的代码现在可以编译并运行。
javac -cp ./;./json-20211205.jar ClientCaller.java
必须添加一个类路径元素以包括json parser.jar。
java -cp ./;./json-20211205.jar ClientCaller
您现在应该以原始数据格式查看程序的输出。可以在您看到合适的情况下修改和更改信息。
GBPUSD 1646215857362 1.33131 1.33137 1.3313401
GBPUSD 1646215857447 1.33131 1.33136 1.3313351
EURUSD 1646215857472 1.10833 1.10834 1.108335
GBPUSD 1646215857506 1.3313 1.33136 1.3313301
EURUSD 1646215858341 1.10833 1.10833 1.10833
EURUSD 1646215858561 1.10832 1.10833 1.108325