5

ユーザーはドキュメントをWebサービスにPOSTできます。他の場所でストリーミングします。ただし、ストリーミングの最後に、Content-Lengthについて嘘をついていないことを確認する必要があります。

もしそうならheaderContentLength > realContentLength、リクエストは彼らが残りを送信するのを待つだけで、最終的にはタイムアウトになると思います。おそらくそれは大丈夫です。

もしそうならどうheaderContentLength < realContentLengthですか?つまり、完了したと言った後もデータを送信し続けるとどうなるでしょうか。

これはNode.jsによって何らかの方法で処理されますか?そうでない場合、確認するための良い方法は何ですか?dataいくつかのイベントリスナー内のバイトを数えることができると思います---つまり、 req.on("data", function (chunk) { totalBytes += chunk.length; })。しかし、それは応急修理のようです。

4

1 に答える 1

2

リクエストの実際の長さを確認するには、自分で合計する必要があります。dataチャンクはBuffersであり、合計.lengthできるプロパティがあります。

でエンコーディングを指定するとrequest.setEncoding()dataチャンクはString代わりにsになります。その場合は、を呼び出しBuffer.byteLength(chunk)て長さを取得します。(Bufferノード内のグローバルオブジェクトです。)

各チャンクの合計を合計すると、送信されたデータの量がわかります。大まかな(テストされていない)例を次に示します。

https.createServer(function(req, res) {
    var expected_length = req.headers['content-length']; // I think this is a string ;)
    var actual_length = 0;
    req.on('data', function (chunk) {
        actual_length += chunk.length;
    });
    req.on('end', function() {
        console.log('expected: ' + expected_length + ', actual: ' + actual_length);
    });
});

注:実際の長さではなく、コンテンツのlength最大長を指します。Bufferただし、チャンクバッファは常に正確な正しい長さで作成されるため、この場合は機能します。他の場所でバッファを使用している場合は、そのことに注意してください。

于 2012-07-25T22:42:39.307 に答える