私は、複数のプレーヤーを同時に接続すると、私の(マルチスレッドの)サーバーにこの奇妙な問題があります.FlashWriterはflush()またはprint()を終了するのに100秒以上(2分)以上かかることがあります。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はこのようなものです::私はsend()メソッドにsynchronizedキーワードを追加する場合は、サーバ全体がすべての遅れを開始
_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
_out = new PrintWriter(_socket.getOutputStream());
ここ
コードです2秒、私はしない場合、いくつかのランダムなプレイヤーは何の理由も遅れを開始します。
誰でもご存知ですか?これはどこから来たのですか?私は何をすべきか?
クライアントを制御することができないため、任意の数のクライアントが読み込みを停止するか、許容できないほど遅くなることが想定されます。これが起こるとき、あなたはこれをどのように処理するのか考える必要があります。クライアントがデータをすばやく読み取っている場合は、10ミリ秒未満で500接続にフラッシュできます。即ち、バッファは常に自由空間を有する。低速のクライアントが他のすべてのクライアントを減速させることはできません。 –