0

私は一般的にネットゲームを開発しています:

接続しているクライアントごとにserverThreadを起動するサーバーがあります。
その目的は、特定のクライアントからのメッセージをリッスンし、サーバーで処理することです。
また、開かれたクライアントごとに、サーバーからのメッセージをリッスンするスレッドであるclientThreadを起動します。
2つのスレッドは非常に単純で類似したスレッドであり、Runnable Interfaceを実装しているため、runメソッドをオーバーライドします。
各Runメソッドは、開始時にコマンド(ブロッキングコマンド)を持つある種の無限ループです。

intコマンド=m_In.readInt();

次に、受信したコマンドに対してケース構造を切り替えることでプロセスを実行します。
プロセスが完了した後、ループによりコードはブロッキングm_In​​.readInt()に戻り、
別のコマンドが来るのを待ちます。

私の質問は次のとおりです。私のネットゲームには、このm_Inを介した通信を使用する十分なオプションがあります。したがって、2つ以上のメッセージがclientThreadにほぼ集まっている場合、dataInputStreamはどのように機能しますか?
最初のメッセージの処理を開始し、処理が完了すると、ある種のキューにある2番目のメッセージを取得しますか?または、2番目のメッセージをドロップして、失われる可能性がありますか?たぶん、そのストリームにはバッファがあるので、2番目のメッセージをキューなどに格納しますか?

ありがとう

4

1 に答える 1

1

ストリームはその性質上、データが指定された順序で来ることを期待しています。2つのスレッドが同時に同じストリームに書き込んでいる場合、悪いことが起こります。

これで、ストリームへのアクセスを確実に同期し、2つのスレッドに書き込みをインターリーブさせることができます(受信者にデータの読み取り方法を指示する何らかのフォーマットをストリーム上に構築する限り)が、デフォルトではこれを取得しません。

ただし、通常、各クライアントスレッドには独自の接続があり、書き込み先の独自のストリームがあります。サーバーは明らかに「同時に」複数のストリームから読み取ることができ、これが通常のサーバーパターンです。

于 2011-10-18T00:14:35.377 に答える