当我同时连接 500 多个玩家时,我的(多线程)服务器出现了这个奇怪的问题,PrinterWriter 有时需要超过 100 秒或更长时间(2 分钟)才能完成 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());
如果我将关键字 synchronized 添加到 send() 方法,整个服务器开始每 2 秒滞后一次,如果我不这样做,那么一些随机播放器会无缘无故开始滞后。
有人知道吗?这是从哪里来的?我应该怎么办?