[英]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.