我有我的(多线程)服务器这个奇怪的问题,当我得到超过500名玩家同时连接时,PrinterWriter需要超过100秒以上(2分钟),(),有时完成的flush()或打印。PrintWriter verry slow flush()和print()。多线程和套接字。
下面是代码:
public static void send(Player p, String packet)
{
PrintWriter out = p.get_out();
if(out != null && !packet.equals("") && !packet.equals(""+(char)0x00))
{
packet = Crypter.toUtf(packet);
out.print((packet)+(char)0x00);
out.flush();
}
}
的PrintWriter的是这样的:
_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
_out = new PrintWriter(_socket.getOutputStream());
如果我添加同步到send()方法的关键字,整个服务器开始落后于每2秒,如果我不这样做,那么一些随机球员无缘无故开始落后。
任何人有什么想法?这是从哪里来的?我该怎么办?
由于您无法控制客户端,因此您必须假设任何数量的客户端可能会停止阅读或速度缓慢。发生这种情况时,你必须考虑如何处理这个问题。如果您的客户正在以足够快的速度读取数据,您应该能够在10毫秒内刷新到500个连接。即缓冲器总是有空闲空间。你不能让一个慢的客户放慢每一个客户的速度。 –