java CPUWise,如何优化UDP数据包发送?
我目前有一个游戏,我为它实现了一个客户端和一个服务器
然后,我让服务器向客户端发送有关其位置的数据,客户端向服务器发送移动输入,等等
问题是CPU的使用率飙升至100%。我已将高使用率直接连接到以下代码,这些代码位于每秒调用十次的update()方法中:
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();
}
}
为什么仅仅通过发送UDP数据包就占用了这么多CPU?如果有的话,我能做些什么来减少它
# 1 楼答案
我建议您删除或优化产生如此多CPU的代码,CPU分析器是最好的起点,但这些可能是CPU消耗的原因
new String()
它几乎肯定是多余的李>编辑:这就是我的想法。不是每个客户端发送5个数据包,而是总共只发送一个数据包。对于10个客户端,您发送1/50的数据包,从而减少开销
当这个性能测试运行时,它会打印出来
编辑:要写/读文本,可以执行以下操作
如果你需要更复杂的东西,你应该考虑使用我写的^ a1}。是的