我有我的(多線程)服務器這個奇怪的問題,當我得到超過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個連接。即緩衝器總是有空閒空間。你不能讓一個慢的客戶放慢每一個客戶的速度。 –