2014-04-12 1 views
0

는 I는 HTTP2 spec 살펴 구비하고, 그 참조 :HTTP 2.0 리눅스 : 스트림을 차별화한다는 것은 65K 버퍼를 의미합니까?

  • 는 연결 당 다중 스트림을 가지고
  • 각 스트림의 ID,
  • 을 갖고, 페이로드의 최대 크기는 65K이고

즉, 스트림을 혼합하지 않으려면 recv 버퍼가 65K 이상이어야합니다. 맞습니까? 조금 무겁지 않니?

+0

TCP/IP (프레임/버퍼)가 스트리밍 데이터 사용량보다 낮은 HTTP (프레임/버퍼) 아래에 있습니다. – user2864740

+0

그리고? recv() 할 때, 내 버퍼가 65K보다 작 으면 내 버퍼보다 ​​프레임이 길어지면 어떤 스트림인지 어떻게 알 수 있습니까? – Simon

+0

TCP는 스트림 (프레임)을 제공하고, HTTP 스트림은이 프레임 위에 있고, HTTP 스트리밍은 아직 끝났습니다. HTTP 스트림 프레임의 처음 몇 바이트를 검사하면 스트림이 얼마나 오래되었는지 알 수 있고 적절하게 데이터를 읽는 루프를 반복 할 수 있습니다. TCP는 기본 TCP 스트림 순서를 엉망으로 만들지 않습니다 (즉, 여러 호출 또는 "버퍼로드"를 통해 읽은 경우에도 HTTP 스트림 프레임이 응용 프로그램에서 "혼합"되지 않음) 결국 모든 훨씬 더 작은 버퍼가있는 경우에도 recv의 데이터. – user2864740

답변

0

사실 프레임 크기는 동적이며, 혼잡에 따라 중 하나를 끝으로 변경해야합니다 :

A receiver that wishes to use a smaller flow control window than the current size can send a new SETTINGS frame. 

https://tools.ietf.org/html/draft-ietf-httpbis-http2-04#section-6.9.2

그래서 나는 우리가 버퍼는 현재 프레임 크기에 맞게 만들어야 할 것 같아요.