我目前有一個遊戲,爲此我實現了一個客戶端和一個服務器。CPU-Wise,如何優化UDP數據包發送?
我然後讓服務器向客戶端關於它的位置發送數據,客戶端發送移動輸入到服務器等
的問題是,在CPU焰火至100%。我已經直接連接在高使用率下面的代碼,這是在被每秒稱爲十倍的更新()方法:
try{
sendToClientUDP(("ID:" + String.valueOf(uid)));
sendToClientUDP(("Scale:" + GameServer.scale));
for (Clients cl : GameServer.players){
//sendToClient(("newShip;ID:" + cl.uid).getBytes(), packet.getAddress(), packet.getPort());
sendToClientUDP((("UID:" + cl.uid +";x:" + cl.x)));
sendToClientUDP((("UID:" + cl.uid +";y:" + cl.y)));
sendToClientUDP((("UID:" + cl.uid +";z:" + cl.z)));
sendToClientUDP((("UID:" + cl.uid +";Rotation:" + (cl.rotation))));
cl.sendToClientUDP(new String("newShip;ID:" + uid));
sendToClientUDP(new String("newShip;ID:" + cl.uid));
}
}catch (Exception e){
e.printStackTrace();
}
卸下代碼和CPU使用率過高消失。
這是我的sendToClientUDP()
方法。
public void sendToClientUDP(String str){
if (!NPC){ //NPC is checking if it is a computer-controlled player.
UDP.sendData(str.getBytes(), ip, port);
}
}
這裏是我的UDP.sendData()方法:
public static void sendData(String data, InetAddress ip, int port) {
sendData(data.getBytes(), ip, port);
}
public static void sendData(byte[] data, InetAddress ip, int port) {
DatagramPacket packet = new DatagramPacket(data, data.length, ip, port);
try {
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
爲什麼如此多的CPU被簡單地通過發送UDP數據包使用?如果有的話,我能做些什麼來減少它?
錯誤,發送所有的東西在一個單一的數據報? – EJP