요청 및 응답 스트림 - 관찰

HTTP 요청 및 응답 스트림. HTTP 스트림과 해당 청킹을 이해하기 위해 Postman을 사용한 방법에 대한 이야기입니다.

먼저 소스코드




// The source: https://nodejs.org/api/stream.html#api-for-stream-consumers
const http = require('http');

const server = http.createServer(
  function toUnderstandRequestAndResponseStreamRoleInDataFetching(req, res) {
    let body = '';
    let chunksReceived = 0;
    req.setEncoding('utf8');

    req.on('data', function saveChunkDataAndChunkCount(chunk) {
      body += chunk;
      chunksReceived += 1;
    });

    req.on('end', function sendReceivedChunkDataStatistic() {
      try {
        const chunkStatistic = JSON.stringify({
          chunkCount: chunksReceived,
          received: body,
        });

        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.write(chunkStatistic);
        res.end();
      } catch (error) {
        // treat all errors as internal server error
        res.statusCode = 500;
        // let the user know what happened
        return res.end(error.message);
      }
    });
  }
);

const port = 3001;
server.listen(port);


청크 수집



리스너는 청크로 데이터를 수신합니다. 서버는 청크로 데이터를 받기 때문에 데이터가 분할됩니다.

req.on('data', function saveChunkDataAndChunkCount(chunk) {
  body += chunk;
  chunksReceived += 1;
});


각 청크는 얼마나 클 수 있습니까?

내가 포스트맨을 사용한 방법



우편 배달부를 열고 get 요청을 보내기 시작했습니다. 각 요청에 더 많은 문자를 추가했습니다. 각 청크와 증가된 청크 카운터를 인쇄했습니다. 청크 수를 늘리는 데 50kb 이상이 걸리는 것을 관찰했습니다. 더 많은 문자로 요청을 보내기 시작했습니다. 88개의 청크가 포함된 요청이 '잠시' 걸리는 것을 관찰했습니다.

const chunkStatistic = JSON.stringify({
  chunkCount: chunksReceived,
  received: body,
});


이전의 모든 관찰은 다음과 같은 결론을 도출합니다.


  • RequestResponse 스트림입니다.
  • Request 읽을 수 있는 스트림입니다.
  • Response 쓰기 가능한 스트림입니다.

  • 요청 및 응답 스트림에 대한 읽기 및 쓰기는 사용자에게 숨겨져 있습니다. 그러나 스트림에 데이터를 수동으로 가져오고 쓸 가능성이 있습니다. 읽기 및 쓰기의 수동 제어를 통해 가져오기 우선 순위를 제어할 수 있습니다.

    참조


  • NextJS - Streaming SSR

  • 스트리밍 SSR에 대한 Dan Abramov의 문서 링크를 추가하고 싶었지만 찾을 수 없었습니다. 그래도 존재한다는 점에 주목하고 싶었습니다.

    관련 읽기


  • MDN - Streams API
  • MDN - Using readable streams
  • MDN - Using writable streams
  • MDN - ReadableStream
  • MDN - Response
  • MDN - WritableStream
  • MDN - Streams API concepts
  • 좋은 웹페이지 즐겨찾기