4

サーバーに接続しているクライアントがあります。クライアントはサーバーにいくつかのメッセージを送信しますが、それらのメッセージを使用する予定がない場合は、気にせず、メッセージの解析に時間を無駄にしたくありません。私が使用しているすべての i/o は単純な Java i/o であり、nio ではありません。

入力ストリームを作成し、そこから読み取らない場合、そのバッファがいっぱいになり、問題が発生する可能性はありますか? もしそうなら、私ができること、またはそれが見ているデータをただ捨てるように設定できるプロパティはありますか?

サーバーが入力ストリームをまったく作成しない場合はどうなるでしょうか。クライアント/送信側で問題が発生しますか?

私にお知らせください。

ありがとう、ジブ

4

5 に答える 5

5

クライアントから接続するacceptと、InputStream. そのストリームから読み取らない場合、クライアントのデータはバッファリングされます。最終的に、バッファーがいっぱいになり、クライアントがさらにデータを書き込もうとするとブロックされます。クライアントがサーバーからの応答を読み取る前にすべてのデータを書き込むと、典型的なデッドロック状態になります。クライアントからのデータを本当に気にしない場合は、skipEOF まで読み取り (または を呼び出し)、データをドロップします。または、標準の要求/応答 (HTTP など) プロトコルでない場合は、ストリームを継続的に読み取る新しいスレッドを起動して、ストリームがバックアップされないようにします。

于 2009-08-24T16:50:10.977 に答える
2

クライアントから有用なデータが得られない場合、接続を許可する意味は何ですか?

于 2009-08-24T16:39:01.903 に答える
1
InputStream in = ....
byte[] buffer = new byte[4096] // or whatever
while(true)
  in.read(buffer);

接続を受け入れる場合は、データを読み取る必要があります。実を言うと、これ (すべてのデータを無視するサーバー) が役立つような状況を見たことがない (または予見できる) ことはありません。

于 2009-08-24T16:55:56.267 に答える
1

Javaでバッファから読み取らないことの意味についてはよくわかりません.OSは最終的にそのソケットでのデータの受け入れを停止すると思いますが、よくわかりません.

データを確実に破棄するために、InputStream の skip メソッドをときどき大きな数で呼び出してみませんか?

于 2009-08-24T16:42:26.263 に答える
0

リクエストを受け入れると InputStream を取得すると思うので、そのリクエストを承認しないと、基礎となるフレームワーク(つまり、Tomcat)がそのリクエストをドロップします(時間が経過した後)。

よろしく。

于 2009-08-24T16:45:17.303 に答える