簡體   English   中英

在Java中讀取JSON的最快方法以及如何為服務器瀏覽器計算ping

[英]Fastest way to read json in java and how to calculate ping for a server browser

我正在嘗試用Java編寫游戲服務器瀏覽器的代碼。 我首先從url(json)中檢索服務器到JsonArray 然后,我循環瀏覽並使用HttpURLConnection檢索服務器信息(技能,地圖等,它們也都是JSON形式),最后我執行此操作以計算ping:

request = (HttpURLConnection) new URL(serverAddress).openConnection();
request.setConnectTimeout(300);
request.setReadTimeout(300);
start = System.nanoTime();
request.connect();
ping = (System.nanoTime() - start) / 1000000;

這是計算ping的正確方法嗎? 有更快/有效的方法來檢索json嗎? 這真的很慢,一次可以發出多個請求嗎? 如果是的話,您能指出我可以幫助我的方式/鏈接/教程嗎?

我應該改用套接字嗎? 如果是的話,這就是我到目前為止所無法使用的(嘗試將json轉換為字符串,以便可以將其解析為對象)

InetAddress address = InetAddress.getByName(ip);
Socket socket = new Socket(address, port);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print("GET / HTTP/1.1\r\n");
writer.print("Host: " + ip + ":" + port + "\r\n");
writer.print("\r\n");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//DataInputStream dis = new DataInputStream(socket.getInputStream());

StringBuffer inputLine = new StringBuffer();
String line;
while ((line= br.readLine()) != null) {
    inputLine.append(line);
    System.out.println(line);
}

服務器具有以下格式: http://xx.xx.xx.xx:11800

謝謝

我建議使用第二種方法(基於TCPSocket的方法),因為您可以避免在網絡對象上創建HTTP包裝器的開銷。

關於從讀取的輸入字符串創建JSON,您可以使用任何JSON序列化器並將您的讀取的字符串傳遞給它,以創建JSONObject。 使用gson(輕量級JSON序列化器)

Gson gson = new Gson();
JsonElement element = gson.fromJson (tmp, JsonElement.class);
JsonObject object = element.getAsJsonObject();

在您的代碼中,請嘗試:

InetAddress address = InetAddress.getByName(ip);
Socket socket = new Socket(address, port);
BufferedReader br1 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//DataInputStream dis = new DataInputStream(socket.getInputStream());

StringBuffer inputLine = new StringBuffer();
String tmp;
while ((tmp = br1.readLine()) != null) {
    inputLine.append(tmp);
    System.out.println(tmp);
}

說到ping測量,我假設您想動態地知道這些數字,而不僅是在連接時刻。

InetAddress.getByName(host).isReachable(timeOut)將產生ICMP請求。

您可以在此處查看Brian Agnew的響應。 如何使用Java測量網絡的響應時間?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM