一旦有多个客户端连接到服务器,java性能就会出现问题
我目前正在开发一款多人java游戏。为了允许多个客户端同时播放,我创建了一个DatagramSocket
服务器
我的服务器的“协议”是这样工作的:
- 客户端向服务器发送更新李>
- 服务器接收更新李>
- 服务器创建一个新线程来处理更新李>
- 新线程将一个包发送回客户端,其中包含需要呈现的内容李>
第四步通过以下方法实现:
public void sendBack(InetSocketAddress address, ArrayList<RenderEntity> renderEntities) {
Player p = this.clients.get(address);
RenderPacket packet = new RenderPacket(renderEntities, p.getX(), p.getY());
this.byteBuffer = packet.getBytes();
DatagramPacket sendPacket = new DatagramPacket(this.byteBuffer, this.byteBuffer.length, address.getAddress(), address.getPort());
try {
this.socket.send(sendPacket);
} catch (IOException e) {
e.printStackTrace();
}
}
从我在自己的机器上测试的结果来看,这个“协议”运行得相对较好,但从我在网上看到的情况来看,我的“协议”的第四步是非常规的。一旦收到更新,包含需要呈现内容的数据包将被发送到连接到服务器的所有客户端,只发送更新的客户端
为了尝试并实现这一改变,我尝试使用以下方法:
public void sendToAll(ArrayList<RenderEntity> renderEntities) {
try {
for (InetSocketAddress address : this.clients.keySet()) {
Player p = this.clients.get(address);
RenderPacket packet = new RenderPacket(renderEntities, p.getX(), p.getY());
byte[] data = packet.getBytes();
DatagramPacket sendPacket = new DatagramPacket(data, data.length, address.getAddress(), address.getPort());
this.socket.send(sendPacket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
当只有一个客户端连接时,sendToAll(renderEntities)
方法非常有效,但一旦另一个客户端连接,客户端就会遇到许多性能问题,我不知道为什么。我认为问题与服务器无关,因为它仍然能够与客户端通信
当多个客户端连接到服务器时,为什么会出现性能问题,有哪些可能的原因
共 (0) 个答案