1

サーブレットのパフォーマンスをテストするアプリケーションを作成しました。私が書いたコードは、いくつかの要求でうまく機能します。接続数を増やすと、「書き込みバイト数が多すぎます」という例外が発生することがあります。

int startRange = 0, endRange = 10000;
HttpsURLConnection c = null;

c = getHttpsConnection(URL);
c.setDoInput(true);
c.setDoOutput(true);
c.setRequestProperty("Content-Length",(cotentLength+1));
c.setFixedLengthStreamingMode(contentLength+1);
c.setRequestProperty("Content-Type","appplication/zip");
c.setRequestMethod("POST");
c.setRequestProperty("Content-Range", "bytes "+startRange+"-"+endRange+"/"+filesize);

OutputStream op = c.getOutputStream();

送信する固定チャンクを計算しますbyte[] partBuf = new byte[contentLength+1];

それから

op.write(partBuf)
String range = c.getHeaderField("Range");

in.close();
op.flush();
op.close();

送信された特定のリクエストまで「書き込みバイト数が多すぎます」エラーが発生しません。送信されたリクエストが多すぎると、このエラーが発生することがあります..このシナリオをどのように処理しますか?

通常、テストのために、10、100、500、1000 のさまざまなリクエストを生成します。これは、データをチャンクで受信するサーブレットにヒットします。

4

4 に答える 4

1

サンプル コードには多くのタイプミスがあるため、実際のコードが何をするのか不明です。しかし、これは非常に間違っているように見えます:

   c.setRequestProperty("Content-Range", startRange-endRange/filesize);

そのヘッダーの内容は文字列である必要がありますが、整数値を送信しているようです。以下は、HTTP 1.1 仕様からヘッダーがどのように見えるの例です。

   HTTP/1.1 206 Partial content
   Date: Wed, 15 Nov 1995 06:25:24 GMT
   Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
   Content-Range: bytes 21010-47021/47022
   Content-Length: 26012
   Content-Type: image/gif

編集したバージョンはまだ正しくありません。これは次のようになります。

c.setRequestProperty("Content-Range", 
                     "bytes " + startRange + "-" + endRange + "/" + filesize);

...これらの変数に適切な値があると仮定します。


これらのエラーを修正したので、次の疑惑のポイントは値そのものです...そしてcontentLength値です。

それが答えでない場合は、サーバーまたはサーブレットが POST の「Content-Range」をサポートしていない可能性を考慮してください。

于 2012-10-30T12:04:00.547 に答える
0

間違った content-length 値を設定しました。設定する必要はまったくありません。Java が設定してくれます。コードを削除するだけです。

于 2012-10-30T20:55:00.253 に答える