WebRTC는 HTTP를 사용합니까?

웹이 진화함에 따라 각 요청에 대해 새 TCP 연결을 열면 문제가 발생했습니다. 우리는 간단한 웹 페이지 대신 전체 응용 프로그램을 구축하기 시작했으며 검색하는 데 필요한 브라우저의 미디어 및 파일 수가. HTML, CSS 및 JavaScript 파일뿐만 아니라 다양한 이미지 및 기타 자산이 필요한 일반적인 웹 응용 프로그램을 상상해보십시오. 각 파일마다 새로운 연결을 만들어야했습니다.

WEBRTC 대 HTTP 스트리밍

그림  адреса адреса · 뇨 뇌 аноним 익뿐자 для этой Â групп다는 ам람 킬리 eloter уреререр dее ни Dе ® ектронно й почты ее у у стников, чтоб 담요 увидеть ис сходное сооб щение.

-토론-WEBRTC

나는 며칠 동안 라이브 비디오 스트리밍을위한 WebRTC 및 HLS, MPEG, MPEG-Dash (HLS, MPEG-Dash)를 실험 해 왔으며, WEBRTC는 이하 2 차 지연 시간을 달성하는 동안 HTTP 스트리밍 프로토콜은 항상 멀티 초기 지연 시간을 가지고 있음을 발견했습니다. 따라서 WebRTC와 HTTP 스트리밍과 관련된 몇 가지 질문이 있습니다.

1. WEBRTC는 HTTP 스트리밍 프로토콜에 비해 Sub Second Latencies를 어떻게 달성 할 수 있습니까??

WEBRTC는 실시간 통신 (RTC) 기능으로 인해 HTTP 스트리밍 프로토콜에 비해 Sub Second Latencies를 달성 할 수 있습니다. WebRTC. 이를 통해 사실상 컨텐츠의 즉각적인 전송이 가능하여 서브 2 차 대기 시간이 발생합니다.

2. WEBRTC가 이미 저도의 비디오 스트리밍을 제공하는 경우 MPEG-Dash 표준에 따라 HTTP 스트리밍 프로토콜을 통합하려는 노력이있는 이유는 무엇입니까??

MPEG-Dash 표준에 따라 HTTP 스트리밍 프로토콜을 통합하려는 노력은 HTTP 기반 스트리밍에 대한 표준화 된 접근 방식의 필요성에 의해 주도됩니다. WebRTC는 저도의 비디오 스트리밍을 제공하지만 모든 사용 사례에 적합하지 않으며 모든 장치 및 소프트웨어와 호환되지 않을 수 있습니다. MPEG-Dash 표준에 따라 HTTP 스트리밍 프로토콜을 통합함으로써 컨텐츠 제공 업체가 다양한 플랫폼 및 장치에서 고품질 비디오 스트리밍을 제공하여 사용자를위한 일관된 시청 경험을 보장하는 것이 더 쉬워집니다.

삼. WEBRTC는 RTMP와 어떻게 비교됩니까?? (지금까지 RTMP를 탐색하지는 못했지만 RTMP로 초 초기 대기 시간을 달성 할 수 있는지 알고 싶습니다.)

WebRTC와 RTMP는 스트리밍 미디어에 사용되는 프로토콜이지만 대기 시간과 호환성 측면에서 약간의 차이가 있습니다. WebRTC는 실시간 통신을 위해 설계되었으며 초 초기 대기 시간을 달성 할 수있어 즉시 전송이 필요한 응용 프로그램에 적합합니다. 반면 RTMP (실시간 메시징 프로토콜)는 주로 인코더와 스트리밍 서버 간의 스트리밍 오디오, 비디오 및 데이터에 주로 사용되는 프로토콜입니다. RTMP는 저하 스트리밍을 제공 할 수 있지만 서브 초 대기 시간을 달성하는 것은 네트워크 조건 및 서버 구성과 같은 다양한 요소에 따라 달라질 수 있습니다.

WEBRTC와 HTTP 기반 스트리밍 간의 비교 연구

오랫동안 스트리밍 대기 시간을 낮추는 것은 인기있는 주제였습니다. 과거의 HTTP 기반 스트리밍에서 수십 초, 심지어 1 분의 대기 시간이 발생했습니다. 단일 자릿수의 전통적인 방송 대기 시간과 WEBRTC 개발 서비스, 문제는 어떤 접근 방식을 취할 것입니다. WebRTC 스트리밍. 현재 사용 가능한 최저 규모의 스트리밍 기술이므로 사실상 즉각적인 전송을 가능하게합니다.

이 멋진 가이드에서는 WebRTC의 작동 방식을 살펴보고 비디오 스트리밍 서비스. 시작하자!

HTTP 기반 및 WEBRTC 스트리밍


HTTP 기반 스트리밍 및 WEBRTC의 빠른 요약

HTTP 기반 프로토콜은 기술적으로 일반 웹 서버입니다. 그들은 연결, 소프트웨어 또는 장치에 관계없이 가능한 최고 비디오 품질 및 시청 경험을 제공하기 위해 적응 형 비트 전속 스트리밍을 사용합니다. 사용 가능한 가장 일반적인 HTTP 기반 프로토콜 중 일부는 MPEG-DASH, Apple입니다’S HLS, Adobe HD 및 Microsoft Smooth Streaming.

WebRTC는 우수한 도구와 광범위한 산업 지원으로 뒷받침되는 강력한 프로토콜입니다. RTC (Rialtime Communication) 기능을 애플리케이션에 제공하여 동료간에 비디오, 오디오 또는 기타 유형의 데이터를 전송할 수 있도록 만들어졌습니다. 이것은 클라이언트 서버 지향 인 HTTP 기반 스트리밍과 비교할 때 둘 사이의 주요 차이점입니다.

UDP 대. TCP

인터넷 프로토콜 스위트의 기본 구성 요소, UDP (User Datagram Protocol) 및 TCP (Transmission Control Protocol)는 둘 다 전송 계층에 있습니다.

UDP와 TCP의 주요 차이점은 TCP가 데이터를 전송하는 동안 3 방향 핸드 셰이크가 필요하다는 것입니다. 이니시에이터 (클라이언트)는 수용자 (서버)가 연결을 설정하고 수용자 답변을 설정하고 개시자가 응답을 인정하고 두 끝 사이의 세션을 유지하도록 요청합니다. 따라서 TCP는 매우 신뢰할 수 있으며 패킷 손실 및 주문을 처리 할 수 ​​있습니다.

반면에 UDP는 그렇습니다’t 핸드 셰이크가 시작되어야합니다. 대역폭 제약 조건에 관계없이 데이터를 전송하여 더 빠르고 위험합니다. UDP는 재전송, 패킷 순서 또는 오류 확인을 지원하지 않기 때문에 네트워크 딸꾹질은 운송중인 데이터를 오염시킬 가능성이 있습니다.

WebRTC와 같은 프로토콜은 종종 UDP를 사용하는 반면 HTTP 기반 프로토콜은 TCP를 사용합니다.

WEBRTC는 HTTP 기반 스트리밍과 비교하여 어떻게 쌓입니까??

  • 어떤 유형의 대기 시간을 찾고 있습니까??
  • 청중의 규모는 무엇입니까??
  • 지출하고자하는 최대 금액은 얼마입니까??

지연 시간

대기 시간 질문에 대한 답변은 목표로하는 대기 시간 범위에 따라 다릅니다.

LL-HL 및 LL-Dash와 같은 새롭고 향상된 HL에는 3 초 이하의 대기 시간이 있습니다. 이것은 여전히 ​​빠른 것으로 간주되며 대부분의 저렴한 사용 사례에 충분합니다. 반면에 WebRTC는 사용 사례가 실시간 스트리밍이 필요한 경우 가장 빠른 솔루션으로 남아 있습니다. 현대 인터넷에 완전히 적응하기 위해 개발 된 UDP 프로토콜이기 때문에. 500ms의 실시간 대기 시간을 지원합니다.

WebRTC는 양방향 실시간 커뮤니케이션을 제공하도록 설계되었습니다. TCP를 기반으로하는 HLS와 달리 WEBRTC는 UDP를 기반으로합니다. 즉, webrtc는 클라이언트와 서버가 핸드 셰이크 정보를 교환하지 않고 시작할 수 있음을 의미합니다. 결과적으로 WebRTC는 더 빠르지 만 네트워크 변동에 더 취약합니다.

솔루션이 피어 투 피어, 실시간 스트리밍이 필요한 경우 WEBRTC는 사용하는 프로토콜입니다. 그러나 50 명 이상의 청중을 키워야한다면 전략을 재고해야합니다.

HLS와 비교하여 WebRTC 스케일링은 실질적으로 더 어렵습니다. 그러나 이것은 하이브리드 워크 플로로 해결할 수 있습니다. 귀하의 선택은 사용 사례 및 대상 고객 규모에 따라 결정됩니다.

대규모 청중에게 다가 갈 때 HTTP 기반 프로토콜이 상단에 나옵니다.

WebRTC는 HTTP를 사용합니까?

웹이 진화함에 따라 각 요청에 대해 새 TCP 연결을 열면 문제가 발생했습니다. 우리는 간단한 웹 페이지 대신 전체 응용 프로그램을 구축하기 시작했으며 검색하는 데 필요한 브라우저의 미디어 및 파일 수가. HTML, CSS 및 JavaScript 파일뿐만 아니라 다양한 이미지 및 기타 자산이 필요한 일반적인 웹 응용 프로그램을 상상해보십시오. 각 파일마다 새로운 연결을 만들어야했습니다.

WEBRTC 대 HTTP 스트리밍

그림  адреса адреса · 뇨 뇌 аноним 익뿐자 для этой Â групп다는 ам람 킬리 eloter уреререр dее ни Dе ® ектронно й почты ее у у стников, чтоб 담요 увидеть ис сходное сооб щение.

-토론-WEBRTC

나는 며칠 동안 라이브 비디오 스트리밍을위한 WebRTC 및 HLS, MPEG, MPEG-Dash (HLS, MPEG-Dash)를 실험 해 왔으며, WEBRTC는 이하 2 차 지연 시간을 달성하는 동안 HTTP 스트리밍 프로토콜은 항상 멀티 초기 지연 시간을 가지고 있음을 발견했습니다. 따라서 WebRTC와 HTTP 스트리밍과 관련된 몇 가지 질문이 있습니다.

1. WEBRTC는 HTTP 스트리밍 프로토콜에 비해 Sub Second Latencies를 어떻게 달성 할 수 있습니까??

2. WEBRTC가 이미 저도의 비디오 스트리밍을 제공하는 경우 MPEG-Dash 표준에 따라 HTTP 스트리밍 프로토콜을 통합하려는 노력이있는 이유는 무엇입니까??
삼. WEBRTC는 RTMP와 어떻게 비교됩니까?? (지금까지 RTMP를 탐색하지는 못했지만 RTMP로 초 초기 대기 시간을 달성 할 수 있는지 알고 싶습니다.)

WEBRTC와 HTTP 기반 스트리밍 간의 비교 연구

오랫동안 스트리밍 대기 시간을 낮추는 것은 인기있는 주제였습니다. 과거의 HTTP 기반 스트리밍에서 수십 초, 심지어 1 분의 대기 시간이 발생했습니다. 단일 자릿수의 전통적인 방송 대기 시간과 WEBRTC 개발 서비스 , 문제는 어떤 접근 방식을 취할 것입니다. WebRTC 스트리밍. 현재 사용 가능한 최저 규모의 스트리밍 기술이므로 사실상 즉각적인 전송을 가능하게합니다.

이 멋진 가이드에서는 WebRTC의 작동 방식을 살펴보고 비디오 스트리밍 서비스 . 시작하자!

HTTP 기반 및 WEBRTC 스트리밍


HTTP 기반 스트리밍 및 WEBRTC의 빠른 요약

HTTP 기반 프로토콜은 기술적으로 일반 웹 서버입니다. 그들은 연결, 소프트웨어 또는 장치에 관계없이 가능한 최고 비디오 품질 및 시청 경험을 제공하기 위해 적응 형 비트 전속 스트리밍을 사용합니다. 사용 가능한 가장 일반적인 HTTP 기반 프로토콜 중 일부는 MPEG-DASH, Apple입니다’S HLS, Adobe HD 및 Microsoft Smooth Streaming.

WebRTC는 우수한 도구와 광범위한 산업 지원으로 뒷받침되는 강력한 프로토콜입니다. RTC (Rialtime Communication) 기능을 애플리케이션에 제공하여 동료간에 비디오, 오디오 또는 기타 유형의 데이터를 전송할 수 있도록 만들어졌습니다. 이것은 클라이언트 서버 지향 인 HTTP 기반 스트리밍과 비교할 때 둘 사이의 주요 차이점입니다.

UDP 대. TCP

인터넷 프로토콜 스위트의 기본 구성 요소, UDP (User Datagram Protocol) 및 TCP (Transmission Control Protocol)는 둘 다 전송 계층에 있습니다.

UDP와 TCP의 주요 차이점은 TCP가 데이터를 전송하는 동안 3 방향 핸드 셰이크가 필요하다는 것입니다. 이니시에이터 (클라이언트)는 수용자 (서버)가 연결을 설정하고 수용자 답변을 설정하고 개시자가 응답을 인정하고 두 끝 사이의 세션을 유지하도록 요청합니다. 따라서 TCP는 매우 신뢰할 수 있으며 패킷 손실 및 주문을 처리 할 수 ​​있습니다.

반면에 UDP는 그렇습니다’t 핸드 셰이크가 시작되어야합니다. 대역폭 제약 조건에 관계없이 데이터를 전송하여 더 빠르고 위험합니다. UDP는 재전송, 패킷 순서 또는 오류 확인을 지원하지 않기 때문에 네트워크 딸꾹질은 운송중인 데이터를 오염시킬 가능성이 있습니다.

WebRTC와 같은 프로토콜은 종종 UDP를 사용하는 반면 HTTP 기반 프로토콜은 TCP를 사용합니다.

WEBRTC는 HTTP 기반 스트리밍과 비교하여 어떻게 쌓입니까??

  • 어떤 유형의 대기 시간을 찾고 있습니까??
  • 청중의 규모는 무엇입니까??
  • 지출하고자하는 최대 금액은 얼마입니까??

지연 시간

대기 시간 질문에 대한 답변은 목표로하는 대기 시간 범위에 따라 다릅니다.

LL-HL 및 LL-Dash와 같은 새롭고 향상된 HL에는 3 초 이하의 대기 시간이 있습니다. 이것은 여전히 ​​빠른 것으로 간주되며 대부분의 저렴한 사용 사례에 충분합니다. 반면에 WebRTC는 사용 사례가 실시간 스트리밍이 필요한 경우 가장 빠른 솔루션으로 남아 있습니다. 현대 인터넷에 완전히 적응하기 위해 개발 된 UDP 프로토콜이기 때문에. 500ms의 실시간 대기 시간을 지원합니다.

WebRTC는 양방향 실시간 커뮤니케이션을 제공하도록 설계되었습니다. TCP를 기반으로하는 HLS와 달리 WEBRTC는 UDP를 기반으로합니다. 즉, webrtc는 클라이언트와 서버가 핸드 셰이크 정보를 교환하지 않고 시작할 수 있음을 의미합니다. 결과적으로 WebRTC는 더 빠르지 만 네트워크 변동에 더 취약합니다.

솔루션이 피어 투 피어, 실시간 스트리밍이 필요한 경우 WEBRTC는 사용하는 프로토콜입니다. 그러나 50 명 이상의 청중을 키워야한다면 전략을 재고해야합니다.

HLS와 비교하여 WebRTC 스케일링은 실질적으로 더 어렵습니다. 그러나 이것은 하이브리드 워크 플로로 해결할 수 있습니다. 귀하의 선택은 사용 사례 및 대상 고객 규모에 따라 결정됩니다.

대규모 청중에게 다가 갈 때 HTTP 기반 프로토콜이 상단에 나옵니다. 하는 동안 “cdns” WebRTC가 존재하기 때문에 비용은 종종 금지됩니다.

비용

WebRTC는 무료 및 오픈 소스 프로토콜입니다. 그러나 우리가 WebRTC 스케일링에 대해 어떻게 이야기했는지 기억하십시오? 전적으로 가능하며 많은 사용 사례에서 효과적으로 작동하지만 저렴하지는 않습니다. 수백 명의 사람들에게 스트리밍 할 필요가 없다면 WebRTC는 훌륭한 선택입니다. 그러나 많은 잠재 고객에게 다가 가려면 브라우저의 부담을 줄이기 위해 추가 서버에 돈을 쓰야합니다.

HLS는 아마도 가장 비용 효율적인 비디오 전달 방법 일 것입니다. CDN으로 스케일링은 저렴한 HTTP 인프라와 현재 TCP 기반 네트워크 기술을 사용하기 때문에 비용 관점에서 쉽게 정당화됩니다.

결론

지난 몇 년 동안 HTTP 기반 프로토콜과 WebRTC는 먼 길을 왔습니다. 사실에도 불구하고, 그들은 업계를 발전시키는 최첨단 기술이며, 각각 고유 한 장점과 단점이 있습니다. 어느 것도 선택하지 않으면 모든 사람에게 이상적이지만 그들 중 하나는 당신에게 가장 적합 할 수 있습니다.

결국 최적의 프로토콜은 프로젝트의 특성, 배포 할 장치 및 잠재 고객 규모에 따라 결정됩니다. 저도가 낮은 솔루션을 개발할 때 이러한 것들을 명심하십시오.

당신에게 가장 적합한 솔루션을 찾는 것에 대해 궁금합니다? 라이브 비디오 스트리밍 전문가와 연락하십시오!

HTTP, WebSocket, GRPC 또는 WEBRTC : 앱에 가장 적합한 커뮤니케이션 프로토콜?

오늘 30 일 무료 평가판을 활성화하고 프로토 타이핑을 시작하십시오.

  • 화상 채팅을 구축하십시오
  • SFU는 무엇입니까?
  • 비디오 스트리밍 프로토콜
  • P2P 화상 회의

기사 공유 :

응용 프로그램에 대한 통신 프로토콜을 선택할 때 다양한 옵션이 있습니다. 이 게시물에서 우리는’ll 4 가지 인기있는 솔루션을 살펴보십시오 http, WebSocket, grpc, 그리고 Webrtc. 우리는 그 뒤에있는 기술을 조사하여 각 프로토콜을 탐색 할 것입니다’가장 잘 사용되고 강점과 약점.

· 2022 년 9 월 26 일 출판

http vs websockets vs grpc vs webrtc- 커뮤니케이션 프로토콜

우리의 커뮤니케이션 형태는 끊임없이 향상되고 있습니다. 더 빠르고 편리하며 더 신뢰할 수 있습니다. 우리의 커뮤니케이션은 캐리어 비둘기를 사용하여 메시지를 보내는 것부터 우편 메일, 유선 전화 발명, 포켓에 맞는 작은 장치의 이메일 및 문자 메시지로 발전했습니다.

앞으로 우리는 회의와 생일 파티를 VR로 전환 할 수도 있습니다 (희망적으로, 이것은 단지 농담 일뿐입니다!)). 그러나 가장 좋은 커뮤니케이션 형태는 항상 상황에 의존 할 것입니다.

빠른 문자 메시지는 때때로 긴 이메일보다 낫습니다. 다른 경우에는 팀과의 화상 통화가 정보를 교환하는 가장 좋은 방법입니다. 대조적으로, 중요한 보험 서류는 일반 우편으로 보내고 하드 카피로 배달해야합니다.

우리가 사용하는 웹 기술 및 프로토콜에 대해서도 마찬가지입니다. 응용 프로그램마다 의사 소통이 다릅니다.

개요

이 기사에서는 우리’LL은 인기있는 것을 다룹니다 커뮤니케이션 프로토콜 우리는 개발자로 사용하고 다양한 옵션의 장단점을 탐색 할 수 있습니다. 해결책은 다른 것보다 더 나은 솔루션이 없습니다. 특정 응용 프로그램이나 문제에 더 나은 사람들 만 있습니다.

일부 응용 프로그램에는 대기 시간이 낮고 데이터 전송이 높은 피어 투 피어 연결이 필요하며 일부 패킷 (정보) 손실을 수락 할 수 있습니다. 다른 응용 프로그램은 필요에 따라 서버를 설문 조사하고 DON’다른 동료로부터 의사 소통을 받아야합니다. 다른 응용 프로그램에는 데이터 신뢰성과 실시간 통신이 필요합니다.

온라인 멀티 플레이어 게임, 메시징 앱, 블로그 웹 사이트, 미디어 갤러리 앱 및 화상 회의 소프트웨어는 모두 다른 수준의 커뮤니케이션 및 데이터 요구 사항이 있습니다.

비디오 스트리밍 솔루션을 구축하는 경우 다른 고려 사항도 있습니다. 올바른 선택에 대한 자세한 내용은 비디오 스트리밍 프로토콜에 대한 기사를 참조하십시오.

커뮤니케이션 프로토콜이란 무엇입니까??

컴퓨터 네트워킹에서 프로토콜은 장치간에 데이터가 교환되는 방식을 관리하는 일련의 규칙입니다. 프로토콜은 통신의 규칙, 구문, 의미론 및 통신 동기화 및 가능한 오류 복구 방법을 정의합니다.

이 기사에서 논의 된 프로토콜은 Application-Layer 소프트웨어가 서로 상호 작용하는 방법을 정의합니다. 다른 프로토콜은 다른 규칙을 준수합니다’각각의 강점과 한계를 이해하는 데 필수. 이 기사에서는 당신입니다’ll 다음 프로토콜에 대해 배우십시오

통신 프로토콜 - 타임 라인

http (하이퍼 텍스트 전송 프로토콜) 분산, 공동 작업 및 하이퍼 미디어 정보 시스템을위한 응용 프로그램 프로토콜입니다. HTTP는 월드 와이드 웹의 데이터 커뮤니케이션의 기초입니다. HyperText는 텍스트가 포함 된 노드간에 논리적 링크 (HyperLinks)를 사용하는 구조화 된 텍스트입니다. HTTP는 하이퍼 텍스트를 교환하거나 전송하는 프로토콜입니다.

HTTP/2 원래 HTTP 프로토콜의 단점을 해결하고 성능을 향상 시키도록 설계되었습니다. HTTP/2는 HTTP/1보다 빠르고 효율적입니다.1, 그리고 단일 연결을 통해 여러 요청과 응답을 멀티플렉싱 할 수 있도록 멀티플렉싱을 지원합니다. 다른 주목할만한 기능으로는 헤더 압축 및 서버 푸시가 있습니다. 그것’s는 점차 웹 트래픽의 기본 프로토콜이됩니다.

WebSocket 클라이언트와 서버 간의 양방향 통신을 허용하는 프로토콜입니다. 채팅 애플리케이션, 온라인 게임 및 라이브 데이터 스트리밍과 같은 실시간 데이터를 처리하는 응용 프로그램에 인기있는 선택입니다.

grpc 운송에 HTTP/2를 사용하는 최신 오픈 소스 RPC 프레임 워크입니다. 작고 빠른 API 통화를 많이 해야하는 응용 프로그램을위한 훌륭한 선택입니다. GRPC는 많은 언어에 대한 크로스 플랫폼 클라이언트 및 서버 바인딩을 생성하여 클라이언트 애플리케이션이 로컬 객체 인 것처럼 다른 컴퓨터의 서버 응용 프로그램의 메소드를 직접 호출 할 수 있도록합니다.

Webrtc 클라이언트 간의 실시간 커뮤니케이션을 허용하고 직접 피어 투 피어 연결을 설정할 수있는 기술입니다. 비디오, 채팅, 파일 공유 및 라이브 비디오 스트리밍 애플리케이션에 사용됩니다.

TCP 및 UDP 이해

위에서 언급 한 응용 프로그램 계층을 탐구하기 전에’TCP 및 UDP에 대한 기본적인 이해를 갖는 것이 중요합니다.

TCP (전송 제어 프로토콜) 인터넷을 통해 네트워크 대화를 설정하고 유지하는 방법을 정의하는 표준입니다. TCP는 인터넷에서 가장 일반적으로 사용되는 프로토콜 및 모든 연결 지향 네트워크입니다. 웹을 탐색하면 컴퓨터가 TCP 패킷을 웹 서버로 보냅니다. 웹 서버는 TCP 패킷을 컴퓨터로 돌려 보내서 응답합니다. 데이터가 교환되기 전에 두 장치간에 연결이 먼저 설정되며 TCP는 오류 수정을 사용하여 모든 패킷이 성공적으로 전달되도록합니다. 패킷이 손실되거나 손상되면 TCP는이를 재현하려고합니다.

UDP (사용자 데이터 그램 프로토콜) 연결이없고 신뢰할 수없는 전송 계층 프로토콜입니다. 연결을 설정하거나 유지 관리 할 필요가 없으며 메시지가 순서대로 전달 될 것이라고 보장하지 않습니다. 패킷이 전송되지 않거나 그 경우 일부 데이터 손실이있을 수 있음을 의미합니다’s가 손상되었습니다. UDP는 종종 배달을 보장하는 것보다 삭제 된 패킷이 덜 문제가없는 스트리밍 미디어 또는 실시간 응용 프로그램에 사용됩니다.

HTTP/1

그것’응용 프로그램 계층 -HTTP (HyperText Transfer Protocol)에서 모든 인터넷 기반 커뮤니케이션의 기초 및 데이터 전송에 대한 기본적인 이해를 갖는 것이 중요합니다.

다른 프로토콜을보다 자세히 살펴보고 그들이 제공하는 내용을 완전히 이해하기 전에 HTTP/1과 그 한계를 이해하는 것도 중요합니다.

HTTP를 사용하면 클라이언트와 서버가 개별 메시지를 교환하여 통신합니다. 클라이언트가 보내는 메시지는 요청이라고하며 서버에서 전송하는 메시지는 응답이라고합니다. 이 메시지는 TCP 연결을 통해 일반 문자 메시지로 전송됩니다. 또한 TLS를 사용하여 암호화하고 HTTPS 프로토콜을 사용하여 보낼 수 있습니다.

클라이언트는 일반적으로 웹 브라우저 또는 사용자에서 실행되는 응용 프로그램입니다’전화 나 컴퓨터이지만 예를 들어 웹 사이트를 기어 다니는 스크립트와 같이 기술적으로는 무엇이든 할 수 있습니다.

HTTP 요청은 클라이언트에서 서버로 한 방향으로 만 흐를 수 있습니다. 서버가 클라이언트와의 통신을 시작할 수있는 방법은 없습니다. 요청에만 응답 할 수 있습니다.

HTTP/1.1 요청/응답 예제

HTTP는 기존 웹 및 클라이언트 애플리케이션에 적합하며 정보가 필요합니다. 예를 들어, 페이지를 새로 고침하고 최신 정보를 가져 오기 위해 서버에 요청이 이루어집니다.

그러나이 프로토콜은 원래 의도되지 않은 방식으로 확장되었습니다. 다음 섹션에서는 다음과 같습니다’ll HTTP/1의 일부를 탐색하십시오’S 한계.

HTTP/1 실시간

HTTP/1은 클라이언트에서 서버로 실시간으로 메시지를 보내야하고 그 반대로. 예를 들어, 클라이언트와 공유 해야하는 서버에서 새 정보를 사용할 수있는 경우 클라이언트가 요청을 시작한 후에만이 트랜잭션이 발생할 수 있습니다.

HTTP Short and Long Polling이라는 기술을 사용하고 서버에서는 이벤트를 사용하는 해결 방법이 있습니다.

짧은 투표

HTTP Short Polling은 클라이언트가 새로운 데이터로 응답 할 때까지 서버에 요청을 반복적으로 보내는 기술입니다. 데이터가 수신되면 프로세스를 다시 시작하고 다른 것을 사용할 수있을 때까지 반복적으로 묻습니다.

HTTP 짧은 폴링

이것은 HTTP 요청/응답을 지속적으로 전송하고 구문 분석하여 많은 자원을 낭비하기 때문에 비효율적 인 실시간 커뮤니케이션 전략입니다.

긴 폴링

HTTP Long Polling을 사용하면 클라이언트로부터 단일 요청이 이루어지고 서버는 새 데이터를 사용할 수 있고 응답을 보낼 수있을 때까지 연결을 열어줍니다. 클라이언트가 응답을받은 후 즉시 새로운 연결이 다시 이루어집니다.

HTTP 긴 폴링

긴 폴링은 짧은 폴링보다 효율적이지만 실시간 커뮤니케이션을위한 최적의 솔루션은 아닙니다.

서버 분리 이벤트 (SSE)

서버 전송 이벤트는 클라이언트가 연결을 열고 서버에서 실시간으로 업데이트 (푸시 메시지)를 실시간으로 수신 할 수 있도록합니다. 이것은 단방향 연결이므로 클라이언트에서 서버로 이벤트를 보낼 수 없습니다.

SSE는 초기 클라이언트 연결이 설정되면 서버가 클라이언트에 대한 데이터 전송을 시작하는 방법을 설명하는 표준입니다.

HTTP/1의 성능 문제

대부분의 HTTP 데이터 흐름은 작고 파열 된 데이터 전송으로 구성되는 반면 TCP는 장기 연결 및 벌크 데이터 전송에 최적화됩니다. 네트워크 왕복 시간은 대부분의 경우 TCP 처리량 및 성능의 제한 요소입니다. 결과적으로 대기 시간은 성능 병목 현상이며 대부분의 웹 응용 프로그램은이를 통해 제공합니다.

위의 의미는 HTTP가 사용하는 TCP가 오래 지속되는 연결을 처리하고 많은 데이터를 전송하기 위해 구축되었다는 것입니다. 반면에 HTTP/1은 짧은 수명이 많은 TCP 연결을 열고 일반적으로 작은 데이터 만 보내는 것입니다.

헤드 라인 차단

HTTP/1의 성능 문제.0 각 요청/응답에 대해 새 TCP 연결을 열어야한다는 것입니다. 이것은 HTTP가 처음에 발명 한 것에 대한 문제가 아니 었습니다. HTTP가 “하이퍼 미디어”.

웹이 진화함에 따라 각 요청에 대해 새 TCP 연결을 열면 문제가 발생했습니다. 우리는 간단한 웹 페이지 대신 전체 응용 프로그램을 구축하기 시작했으며 검색하는 데 필요한 브라우저의 미디어 및 파일 수가. HTML, CSS 및 JavaScript 파일뿐만 아니라 다양한 이미지 및 기타 자산이 필요한 일반적인 웹 응용 프로그램을 상상해보십시오. 각 파일마다 새로운 연결을 만들어야했습니다.

HTTP/1이 온다.1, 동일한 TCP 연결에 대해 둘 이상의 요청 또는 응답을 가질 수 있음을 정의하는 지속적인 연결이 있습니다.

이 솔루션은 확실히 개선이지만 서버가 여러 응답으로 동시에 응답 할 수는 없습니다. 그것’요청을 보내고 응답을 기다린 다음 두 번째 요청 등을 보내야하는 직렬화 된 프로토콜입니다. 이것은 헤드 라인 차단이라고합니다.

그러나 브라우저가 동일한 원점에 최대 6 개의 TCP 연결을 열 수 있기 때문에 일부 병렬 처리를 달성 할 수 있습니다 “기원” 고유 한 조합으로 정의됩니다 주인 그리고 포트 숫자.

예를 들어 12 개의 이미지를로드 해야하는 사진 갤러리 앱이있는 경우 처음 6 개의 이미지를로드하라는 6 개의 요청이 이루어지며 각 요청은 후드 아래에서 새로운 TCP 연결이 열립니다. 다른 6 개의 이미지는 응답이 수신 될 때까지 차단되고 열린 연결 중 하나를 사용하여 다음 이미지를로드 할 수 있습니다. 동일한 원점에 대한 원래 6 개의 열린 TCP 연결은 사용할 수있게되면 재사용되지만 6 개의 활성 연결로 제한됩니다.

당연히 프로그래머는 원점을 변경하여 쉬운 해결 방법을 찾았습니다. 같은 원산지에있는 모든 자산을 호스팅하는 대신 한 원점에서 6 개의 이미지를 호스팅하고 나머지는 다른 원점에 있습니다. 이제 12 개의 동시 요청 (또는 TCP 연결 열기)을 가질 수 있습니다. 이것은라고합니다 “샤딩”.

  • 이미지 1-6 1에 호스팅됩니다.이미지.com
  • 이미지 7-12 2에서 호스팅됩니다.이미지.com

그래도 몇 번이나 할 수 있는지에 제한이 있습니다’최적의 파편 수를 결정하기는 어렵습니다. 어느 시점에서 더 많은 파편을 추가하면 복잡성이 증가하고 오버 헤드를 추가하며 링크가 혼잡 해지고 패킷이 손실 될 수 있습니다.

각 TCP 연결이 서버에 불필요한 오버 헤드를 추가하므로 다른 문제도 있습니다. 연결은 서로 경쟁하고, 각 TCP 및 TLS 핸드 셰이크는 불필요한 비용을 추가하며, 기타 서버/프록시 리소스는 활성 연결을 유지하는 데 사용해야합니다. HTTP/1이 기본 TCP 연결을 사용하는 방식에는 명확한 제한이 있습니다.

헤더와 쿠키가 부풀어 오릅니다

또 다른 문제는 HTTP 사양이 발전함에 따라 사양에 더 많은 헤더가 추가되었다는 것입니다. 개발자는 또한 헤더에 쿠키를 추가 할 수있는 옵션이 있으며, 이는 임의로 클 수 있습니다. 이것은 각 요청과 응답 이이 모든 텍스트 정보를 전송해야하므로 많은 부풀어 오르고 http/1.1 헤더 및 메타 데이터를 압축하기위한 메커니즘이 포함되어 있지 않습니다.

고성능 RPC 프로토콜이 필요한 경우이 오버 헤드가 빠르게 추가되며 HTTP는 더 이상 최적의 솔루션이 아닙니다.

우선 순위

HTTP/1.1, 브라우저 “우선 순위를 정하십시오” 고객에게 우선 순위 대기열을 보유하고 사용 가능한 TCP 연결을 최대한 활용하는 방법에 대한 교육받은 추측을 취함으로써 리소스. 브라우저는 다른 자원보다 더 가치있는 자원을 결정하기 위해 휴리스틱을 내장했습니다.

예를 들어, CSS로드하면 이미지로드보다 우선 순위가 높아집니다.

문제는 개발자로서 한 요청의 우선 순위를 정하거나 진행중인 메시지의 우선 순위를 변경할 수있는 방법이 없다는 것입니다. 먼저로드 된 콘텐츠는 브라우저에 달려 있으며 우선 순위 지정 체계에서는 아무 말도하지 않습니다.

HTTP/2

HTTP/2는 HTTP 프로토콜의 개선 된 버전이며 HTTP/1으로 위에서 설명한 모든 성능 문제를 해결하고 의미론 (동사, 헤더 등)을 변경하지 않고 다른 향상을 추가합니다.

HTTP/2의 가장 중요한 변화는 멀티플렉싱을 사용하여 동시에 여러 HTTP 요청 및 응답을 단일 TCP 연결. 모든 HTTP/2 연결은 지속적이며 원산지 당 하나의 연결 만 필요합니다. 이를 통해 네트워크 리소스를 훨씬 더 효율적으로 사용할 수 있으며 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.

HTTP/2의 다른 이점 :

  • 헤더 압축을 사용하여 헤더 크기를 줄이며 동일한 일반 텍스트 헤더를 반복해서 보내지 않습니다. 이것은 요청/응답의 오버 헤드와 전송 된 데이터 금액을 크게 줄입니다.
  • 클라이언트 (개발자)가 필요한 리소스의 우선 순위를 지정할 수있는 우선 순위를 활성화합니다. 그것’진행중인 요청의 우선 순위를 업데이트 할 수도 있습니다. 예를 들어, 이미지가 더 이상 표시되지 않으면 우선 순위가 변경 될 수 있습니다.
  • 서버 푸시를 사용하여 요청하기 전에 클라이언트에게 데이터를 보냅니다. 이것은 클라이언트가 여러 요청을 할 필요가 없음을 제거하여 로딩 시간을 개선하는 데 사용할 수 있습니다.

HTTP/2는 어떻게 작동합니까??

HTTP/2의 기본 프로토콜 장치는 액자. 이 새로운 바이너리 프레임 메커니즘은 클라이언트와 서버간에 데이터가 교환되는 방식을 변경합니다.

표준은 10 가지 다른 프레임 유형을 정의하며 각각 다른 목적을 제공합니다. 예를 들어 헤더 및 데이터 프레임은 HTTP 요청 및 응답의 기초를 형성합니다

HTTP/1.1 대 HTTP/2 요청

액자 특정 유형의 데이터를 전달하는 가장 작은 커뮤니케이션 단위입니다.

다른 프레임 예제는 다음과 같습니다

  • 설정 : 처음 또는 연결 중에 정보 교환 정보.
  • 우선 순위 : 메시지의 우선 순위를 재 할당합니다.
  • push_promise : 서버가 데이터를 귀하에게 푸시 할 수 있도록합니다. 이는 서버가 보낼 내용에 대한 약속 역할을합니다. 예를 들어, 인덱스를 요청하는 경우.html, 서버는 푸시 앱을 약속하는 push_promise를 만들 수 있습니다.JS와 스타일.CSS, 클라이언트가 해당 리소스를 요청할 필요가 없음을 의미합니다.

프레임은 결합되어 a를 형성합니다 메시지, 예를 들어 위의 이미지의 헤더 및 데이터 프레임. 이것은 정상적인 요청 또는 응답과 같습니다.

마지막으로 일련의 메시지 a의 일부가 될 수 있습니다 개울. 이를 통해 클라이언트와 서버 간의 양방향 데이터 흐름과 전체 요청 및 응답 멀티플렉싱이 가능합니다.

HTTP/2 다중 스트림

위의 이미지는 약간 오해의 소지가있어 클라이언트와 서버간에 여러 연결이 열린다는 인상을줍니다. 그러나 단일 TCP 연결이며 데이터가 클라이언트와 서버간에 비 블로킹 방식으로 자유롭게 흐릅니다.

HTTP/2 멀티플렉싱 스트림

새로운 바이너리 프레임 레이어를 사용하면 클라이언트와 서버가 HTTP 메시지를 독립 프레임으로 나누고 인터 리브 한 다음 다른 쪽 끝에서 다시 조립할 수 있습니다.

이것은 HTTP/2의 방법에 대한 요약 일뿐입니다.0 작동합니다. 자세한 내용을 배우고 우선 순위, 서버 푸시 및 헤더 압축을 탐색하려면 깊이있는 기사를 참조하십시오. HTTP/1의 문제와 HTTP/2가 어떻게 해결되는지에 대한 역사를 보려면이 비디오를 시청하십시오.

HTTP/2 양방향 데이터 스트리밍

  • 단일 HTTP/2 연결에는 여러 스트림의 엔드 포인트 인터리빙 프레임과 함께 여러 개의 동시에 열린 스트림이 포함될 수 있습니다.
  • 스트림은 클라이언트 또는 서버가 일방적으로 사용하거나 공유 할 수 있습니다.
  • 스트림은 하나의 엔드 포인트로 닫을 수 있습니다.

서버 푸시 기능에 대한 오해가 많이 있습니다.이를 통해 서버가 HTTP/2를 통한 서버가 예를 들어 필요한 자원을 사전에 보낼 수 있습니다 .JS와 .클라이언트가 요청하지 않고 CSS 파일. 이것은 양방향 스트리밍과 관련이 없으며 캐시 가능한 리소스를위한 웹 최적화 기술 일뿐입니다.

사실은 HTTP/2를 사용하면 서버가’t 시작 a 개울. 그러나 클라이언트가 요청을 보내서 스트림을 열면 양측은 데이터를 보낼 수 있습니다 프레임 언제든지 지속적인 소켓에. 이에 대한 훌륭한 예는 GRPC입니다. 나중에 논의 할 것입니다.

HTTP/2를 사용하면 양방향 데이터 스트리밍을 달성 할 수 있으며’sobsockets와 같은 것보다 더 최적의 솔루션이거나 그렇지 않다고 주장 할 수 있습니다. 우리’ll websocket 섹션에서 이것에 대해 자세히 논의하십시오.

websockets

이 기술의 목표는 여러 HTTP 연결을 여는 데 의존하지 않는 서버와의 양방향 통신이 필요한 브라우저 기반 애플리케이션을위한 메커니즘을 제공하는 것입니다 (E.g., xmlhttprequest 또는 iframes 사용 및 긴 폴링 사용).

Websockets는 클라이언트와 서버 간의 전이중 통신을 가능하게하기 위해 발명되었으며,이를 통해 데이터는 즉시 단일 개방형 연결을 통해 두 가지 방식으로 이동할 수 있습니다.

WebSocket 연결이 설정되면 클라이언트는 업데이트를 위해 서버를 설비 할 필요가 없습니다. 대신, 의사 소통은 양방향으로 발생합니다. 이렇게하면 HTTP/1의 원래 장거리 및 단락에 비해 속도 및 실시간 기능이 향상됩니다. WebSocket에는 준수하는 형식이 없습니다. 모든 데이터, 텍스트 또는 바이트를 보낼 수 있습니다 -이 유연성은 Websockets가 인기있는 이유 중 하나입니다.

이 중 일부는 HTTP/2 섹션에서 논의한 것에 익숙 할 수 있지만’websockets가 HTTP/2 이전에 발명되었다는 점에 유의해야합니다. 우리’나중에 더 비교하십시오.

Websockets의 작동 방식

Websockets는 TCP를 통해 효과적으로 전송 레이어로 실행됩니다.

WebSocket 연결을 설정하려면 클라이언트와 서버는 먼저 일반 HTTP/1에 대한 핸드 셰이크를 수행해야합니다.1 연결. 이 악수는 HTTP에서 WebSockets까지의 다리입니다.

WebSocket 업그레이드 요청

아래는 클라이언트 핸드 셰이크 요청의 예입니다. 클라이언트는 HTTP/1을 사용할 수 있습니다.1 1 메커니즘은 업그레이드 헤더라고 불렀습니다

http /1 받기 /채팅.1 호스트 : 예제.COM : 8000 업그레이드 : WebSocket 연결 : 업그레이드 SEC-WEBSOCKE-KEY : DGHLIHNHBXBSSBUB25JZQ == SEC-WEBSOCKER-VERSION : 13

그런 다음 서버는 프로토콜이 HTTP에서 WebSocket으로 변경 될 것이라는 특별한 응답으로 핸드 셰이크를 마무리합니다

HTTP/1.1 101 스위칭 프로토콜 업그레이드 : WebSocket 연결 : 업그레이드 SEC-WebSocket-Accept : S3PPLMBITXAQ9KYGZZHZRBK+XOO =

WebSockets는 WS : // 또는 wss : // schem에 균일 자원 식별자 (URI)가 필요합니다. WS : // 체계는 ​​암호화되지 않은 연결에 사용되며 WSS : // 체계는 ​​http URL이 http : // 또는 https : // scheme을 사용하는 방법과 유사하게 암호화 된 연결에 사용됩니다.

양방향 통신 채널이 설정되면 클라이언트와 서버는 메시지를 앞뒤로 보낼 수 있습니다. 이 메시지는 이진 데이터에서 텍스트에 이르기까지 모든 것이 될 수 있습니다. WebSocket 연결은 클라이언트 또는 서버가 단절 될 때까지 열려 있습니다.

WebSocket Multiplexing

작성 당시 WebSocket 프로토콜은 내장 된 멀티플렉싱을 지원하지 않습니다. 우리는 HTTP/2 섹션에서 멀티플렉싱에 대해 논의했으며’s http/2의 내장 기능입니다’동일한 연결을 통해 여러 개의 스트림을 다중화 할 수 있습니다. 각 스트림에는 고유 식별자가 발생하고 전송 된 모든 프레임에는 해당 스트림과 관련된 ID가 있습니다.

멀티플렉싱을 지원하지 않으면 WebSocket 프로토콜은 모든 WebSocket 연결에 새로운 전송 연결이 필요하다는 것을 의미합니다. 예를 들어, 동일한 브라우저의 다른 탭에서 실행되는 여러 클라이언트는 별도의 연결을 초래합니다. Websockets를 멀티 플렉스하는 것은 일반적으로 개발자로 구현하거나 타사 플러그인 또는 라이브러리에 의존하는 것입니다.

WebSocket vs HTTP/2

따라서 HTTP/2가 Websockets를 교체했습니다? 짧은 대답은 아니오입니다. 더 긴 대답은 HTTP/2가 양방향 스트리밍을 가능하게한다는 것입니다. 결과적으로 Websockets는 유일한/최상의 옵션이 아닙니다. SPEC로서 HTTP/2는 WebSockets에 비해 더 많은 작업을 수행합니다. 멀티플렉싱이 내장되어 있으며 대부분의 경우 원점에 대한 열린 TCP 연결이 줄어 듭니다. 반면에 WebSockets는 많은 자유를 제공하며 연결이 설정되면 클라이언트와 서버간에 데이터가 전송되는 방법에 제한적이지 않습니다. 그러나 다시 연결을 직접 관리해야합니다 (또는이를 위해이를 수행하는 라이브러리에 의존).

어느 것이 궁극적으로 더 좋고, 어떤 일이 작동하고 다른 하나가 아닌지는 논쟁의 여지가 있으며,이 기사는 의견이 많은 답변을 제공하지 않습니다. WebSockets는 많은 유연성을 제공하며 확립 된 표준으로 모든 현대식 브라우저에서 완전히 지원되며 클라이언트 및 서버 라이브러리 주변의 생태계는 강력합니다.

자세히 설명하고 의견이 많은 토론을 보려면이 스택 오버플로 질문을 참조하십시오

  • HTTP/2가 WebSocket을 사용하지 않도록합니다
  • 낮은 대기 시간 클라이언트에 대한 HTTP/2 또는 WebSockets to Server 메시지
  • 양방향 메시지 스트리밍을위한 http/2 대 웹 소켓

HTTP/2 연결의 단일 스트림을 통해 WebSocket 프로토콜을 실행하는 메커니즘을 허용하는 RFC도 있습니다.

HTTP/2에서 WebSockets를 부트 스트랩 할 수 있으면 하나의 TCP 연결을 두 프로토콜에서 공유하고 HTTP/2의 네트워크를보다 효율적으로 WebSockets로 확장 할 수 있습니다.

이것은 Chrome 및 Firefox에서 구현되었습니다. Chrome Design 문서와 동기 부여를 여기에서 읽을 수 있습니다.

WebSockets를 언제 사용해야합니까??

Websockets는 실시간으로 양방향 통신이 필요한 응용 프로그램에 가장 적합하며 예를 들어 작은 데이터 조각을 빠르게 전송 해야하는 경우 (예 :

  • 채팅 응용 프로그램
  • 멀티 플레이어 게임
  • 협업 편집 응용 프로그램
  • 라이브 스포츠 티커
  • 주식 거래 신청
  • 실시간 활동 피드

우연히도, 이것은 우리 팀이 많은 경험을 가진 영역입니다. 우리’Websockets를 사용하여 채팅 및 활동 공급 인프라를 공급합니다.

Websockets 지원은 훌륭하고 주요 브라우저와 클라이언트가 오랫동안 지원되었으며, 문서화되어 있으며 사용하기 쉽습니다. 그러나 웨켓 켓은 과도하게 사용해서는 안됩니다. 원하는 것에 따라 더 나은 대안이있을 수 있습니다.

예를 들어, 서버 전송 이벤트 (SSE)는 HTTP/2보다 효율적이며 사용하기 간단합니다. SSE는 양방향 통신 시스템이 아닙니다. 서버는 일방적으로 데이터를 클라이언트에게 푸시합니다. 그러나 서버가 클라이언트에 데이터를 전송하는 방법 만 있으면 Websockets의 오버 헤드를 추가하는 것보다 더 나은 옵션입니다. SSE는 또한 HTTP/1로 돌아갑니다.1 HTTP/2를 사용할 수없는 경우. 또한 클라이언트 (또는 브라우저)는 귀하를위한 연결을 관리하고 자동 재 연결을 지원합니다.

WebSockets 위의 연결이 손실되면로드 밸런싱 또는 재 연결을위한 메커니즘이 포함되어 있지 않습니다. 이것은 수동으로 또는 타사 라이브러리에 의해 구현되어야합니다.

grpc

GRPC는 모든 환경에서 실행할 수있는 최신 오픈 소스 고성능 원격 프로 시저 통화 (RPC) 프레임 워크입니다. 로드 밸런싱, 추적, 건강 점검 및 인증에 대한 플러그 가능한 지원으로 데이터 센터와 데이터 센터 전체의 서비스를 효율적으로 연결할 수 있습니다. 장치, 모바일 애플리케이션 및 브라우저를 백엔드 서비스에 연결하기위한 마지막 마일의 분산 컴퓨팅에도 적용됩니다.

GRPC는 처음에 Google에서 개발 된 오픈 소스 계약 기반 RPC 시스템입니다. GRPC는 응용 프로그램이 투명하게 통신하고 연결된 시스템의 구축을 단순화 할 수 있습니다.

많은 언어에 대한 크로스 플랫폼 클라이언트 및 서버 바인딩을 생성하므로 클라이언트 애플리케이션이 로컬 객체 인 것처럼 다른 컴퓨터의 서버 응용 프로그램의 메소드를 직접 호출 할 수 있습니다.

HTTP/2를 기반으로 GRPC 레버리지는 양방향 스트리밍 및 내장 전송 계층 보안 (TLS)과 같은 기능을합니다.

GRPC 동기 부여

그것’GRPC의 동기 부여와 그 이점을 이해하기 위해 발명 된 이유. 예를 들어 HTTP/2 및 Websockets와 같은 기존 기술을 사용하지 않겠습니까?? 우리가 이미 가지고있는 것 위에 다른 추상화 계층이 필요한 이유는 무엇입니까??

인터넷을 통해 데이터를 구성하고 전송할 수있는 다양한 방법이 있습니다. 몇 가지 인기있는 예는 Soap, Rest 및 GraphQL입니다. 자신만의 프로토콜을 만들고 원시 TCP를 통해 데이터를 보내고 원하는 경우 직접 구현을 처리 할 수도 있습니다.

그러나 커뮤니케이션 프로토콜로 선택하더라도 문제는 클라이언트와 서버가 프로토콜에 동의해야한다는 것입니다. 예를 들어, 당신이 있다면’REST API 구축, REST 데이터를 보내는 데 사용해야하는 클라이언트 라이브러리는 HTTP 라이브러리입니다. HTTP 라이브러리는 기본적으로 브라우저에 내장되어 있으며 브라우저는 다음을 위해 모든 것을 처리합니다

  • 서버와의 통신을 설정합니다.
  • HTTP/2를 처리하고 http/1으로의 폴백을 처리합니다. 앞으로 HTTP/3을 지원해야합니다.
  • TLS를 처리하고 프로토콜을 협상합니다.
  • 헤더, 스트림 및 기타 모든 것을 처리합니다.

하지만 당신이라면 어떨까요?’브라우저에 없습니다? 당신이라면 어떨까요?’일부 서버, 골랑 CLI 또는 iOS에서 실행되는 플러터 응용 프로그램에서 실행되는 파이썬 응용 프로그램? 이러한 클라이언트는 모두 의사 소통하는 프로토콜을 이해하는 자체 HTTP 라이브러리가 필요합니다.

운 좋게도 많은 헌신적 인 사람들은 이러한 모든 언어 및 프레임 워크를 위해 다양한 HTTP 라이브러리를 연구하고 있습니다. 일부 언어에는 기능이 다른 여러 HTTP 라이브러리가 있습니다. 그러나이 모든 것은 비용이 듭니다. 그리고 그것은 유지 보수입니다.

예를 들어, 사용하는 Golang 라이브러리가 지원하는 경우 서버를 HTTP/2로 업그레이드하는 경우이 비용은 귀하에게 영향을 줄 수 있습니다. 그러나 프론트 엔드 파이썬 클라이언트에서 동등한 HTTP 라이브러리는 HTTP/2를 구현하지 않았거나 더 이상 유지 관리되지 않을 수 있습니다. 다른 언어로 된 다른 HTTP 라이브러리는 1 : 1을 비교할 수 없습니다.

HTTP 사양이 발전함에 따라 이러한 라이브러리는 발전, 보안 문제, 새로운 기능 및 기타 패치를 따라야합니다. HTTP는 예제 일 뿐이며 WebSocket 프로토콜이나 다른 것도 마찬가지입니다. 주요 브라우저에서 무언가가 잘 구현 될 수 있지만 해당 기능은 여러 언어 및 프레임 워크로 포팅되어야합니다.

GRPC는 어떻게 다릅니다?

GRPC는 인기있는 언어 자체에 대한 라이브러리를 유지 하여이 문제를 해결하려고 시도합니다. 즉, 추가 된 새로운 기능이 이러한 모든 언어에서 지원됩니다.

후드 아래에서 GRPC는 HTTP/2를 프로토콜로 사용하지만이 구현은 귀하에게 숨겨져 있습니다. 앞으로 GRPC의 관리자는 HTTP/2를 HTTP/3으로 쉽게 대체 할 수 있으며, 그 변화로부터 즉시 혜택을받을 수 있습니다.

Grpc는 또한 프로토콜 버퍼를 인터페이스 정의 언어 (IDL)로 사용하고 기본 메시지 인터체인지 형식을 사용합니다. 이 형식은 언어 중립이며 다른 프로그래밍 언어간에 쉽게 통신 할 수 있습니다. 우리’다음 섹션 에서이 개념을 더 탐구하십시오.

GRPC 서버 클라이언트 통신

프로토콜 버퍼는 무엇입니까??

프로토콜 버퍼는 구조화 된 데이터 직렬화를위한 Google의 중립적, 플랫폼 중립, 확장 가능한 메커니즘입니다. XML을 생각하지만 더 작고 빠르며 간단합니다. 데이터를 한 번 구조화하려는 방법을 정의합니다. 그런 다음 특수 생성 된 소스 코드를 사용하여 다양한 데이터 스트림에 구조화 된 데이터를 쉽게 작성하고 읽고 다양한 언어를 사용할 수 있습니다.

전통적으로 API와 함께, 당신은 돈입니다’t 프로토콜 자체에 의해 정의 된 계약이 있습니다. 예를 들어, 당신이 있다면’REST를 사용하여, 당신’RE는 일반적으로 Key/Value 쌍이있는 JSON 메시지를 전송합니다’메시지가 수신 종료에있을 때까지 확인. 이 메시지는 일반적으로 무엇이든 할 수 있습니다’올바른 구조가 정의되도록하기 위해.

다음 JSON 페이로드를 살펴보십시오

‘ID’: 123 ‘이름’: ‘고든’, ‘이메일’: ‘어딘가에 고든@.io’

이 데이터가 클라이언트/서버에서 수신되면 예를 들어 객체로 사로화 될 수 있습니다

수업인

그러나 위에서 언급 한 페이로드에 대한 올바른 직렬화 및 탈선 논리를 구현하는 것은 개발자에게 달려 있습니다. 여기에는 Tojson 및 Fromjson 메소드가 수동으로 코드 생성에 의존하거나 언어의 내장 기능이 될 수 있습니다’다시 사용합니다.

이 데이터 직렬화 방법에 관계없이 스키마가 변경되는 경우 기본 코드를 여러 환경에서 잠재적으로 수동으로 업데이트해야합니다.

프로토콜 버퍼를 사용하면 필드의 객체 유형을 정의하고 필요한 것이며 선택 사항을 지정하는 스키마를 만듭니다

// 사람이 포함 된 요청 메시지&rsquo;S 정보 메시지 담당자 < optional int32 required string name = 2; optional string email = 3; >// 인사말 메시지가 포함 된 응답 메시지는 헬라 링됩니다

그런 다음 노출하려는 절차를 지정할 수 있습니다.

// 인사말 서비스 정의. 서비스 인사 < // Sends a greeting rpc SayHello (Person) returns (HelloReply) <>>

일단 당신&rsquo;VE 데이터 구조 및 스키마를 지정하면 프로토콜 버퍼 컴파일러 Protoc을 사용하여 프로토 정의에서 선호하는 언어로 데이터 액세스 클래스를 생성합니다.

이들은 프로토 파일에 요약 된 개체를 설명하는 인터페이스, 각 필드의 액세서와 함께 전체 구조를 원시 바이트로/구조화하는 방법.

GRPC 모드

GRPC에는 4 가지 운송 모드가 있습니다. 이 네 가지 모드는 예를 들어 이전에 논의한 동작, 예를 들어 일반 요청/응답, SSE 및 WebSockets를 복제합니다.

단백질 RPC

unery rpc는 함수 호출과 유사한 간단한 요청 및 응답입니다. 클라이언트는 일부 데이터를 요청하고 서버는 일부 처리를 수행하고 해당 데이터를 반환합니다.

서버 스트리밍 RPC

클라이언트가 서버에 단일 요청을 보내고 여러 또는 응답 스트림을 기대하는 서버 스트리밍 RPC. 클라이언트는 더 이상 메시지가 없을 때까지 반환 된 스트림에서 읽습니다.

예를 들어 비디오 스트리밍이 비디오로드를 요청하고 서버가 비디오 스트림에 응답합니다.

클라이언트 스트리밍 RPC

클라이언트 스트리밍 RPC가 클라이언트가 일련의 메시지를 작성하고 제공되는 스트림을 사용하여 서버로 보냅니다. 클라이언트가 메시지 작성을 마치면 서버가 읽고 응답을 반환하기를 기다립니다.

예를 들어 큰 파일을 서버에 업로드하고 모든 데이터가 전송되면 클라이언트가 최종 메시지를 전송하여 업로드가 완료되고 서버가 선택적으로 응답 할 수 있음을 나타냅니다.

양방향 스트림 RPC

클라이언트와 서버 스트리밍의 조합. 채팅 애플리케이션 또는 멀티 플레이어 비디오 게임은 클라이언트와 서버간에 데이터가 자유롭게 흐르는 예제입니다.

양측이 읽기 쓰기 스트림을 사용하여 일련의 메시지를 보내는 양방향 스트리밍 RPC. 두 스트림은 독립적으로 작동하므로 클라이언트와 서버는 원하는 순서대로 읽고 쓸 수 있습니다.

양방향 스트리밍 RPC에서, 메소드를 호출하는 클라이언트가 통화를 시작합니다. 클라이언트 및 서버 측 스트림 처리는 응용 프로그램에 따라 다릅니다. 두 스트림은 독립적이므로 클라이언트와 서버는 어떤 순서로든 메시지를 읽고 쓸 수 있습니다.

마이크로 서비스

GRPC가 강력한 위치의 좋은 예는 마이크로 서비스 내에 있습니다.

GRPC 마이크로 서비스 상호 작용

이 예에는 Python, Java 및 Golang으로 작성된 마이크로 서비스가 있습니다. 이들은 자체 사이에 데이터를 보내야합니다.

HTTP/1 사용.1 및 JSON은 각 언어에 대한 HTTP 연결 및 직렬화를 구현해야합니다. 또한 각 언어에 대해 스키마가 올바르게 구현되었는지 확인해야하며 API가 변경되면 모든 서비스를 수동으로 업데이트해야합니다.

반면 Grpc는 HTTP/2의 구현을 처리합니다.0 우리를위한 프로토콜. 단일 스키마가 작성되었으며 사용 된 모든 언어에 대해 해당 코드를 생성 할 수 있습니다. 이 스키마는 모든 언어가 준수 해야하는 계약으로 볼 수 있으며 이러한 서비스 간의 의사 소통을 훨씬 쉽고 신뢰할 수 있습니다.

GRPC 성능

GRPC는 빠르며 일반적으로 휴식보다 훨씬 더 성능이 있습니다

  • 프로토콜 버퍼는 직렬화되어 AS로 전송됩니다 전선 위의 바이너리, 일반적인 JSON 메시지보다 상당히 작습니다.
  • GRPC는 HTTP/2를 사용합니다.0 추가 개선을 제공합니다

GRPC는 전송 된 데이터를 효율적으로 압축하는 데 큰 이점이 있습니다. 데이터 페이로드가 작을수록 TCP 라운드 트립이 적을수록 TCP 라운드 트립이 필요합니다. 최대 전송 장치 (MTU)는 네트워크 연결 장치가 허용하는 가장 큰 데이터 패킷을 나타내는 측정 값입니다.

압축이 처리되며 GRPC를 사용하여 혜택을받습니다. 대안으로, 정기적 인 http를 통해 전송하기 전에 JSON 메시지를 압축하기 위해 GZIP와 같은 것을 사용하는 것이 가능합니다. 그러나 이것은 불편할 수 있으며 복잡성의 층을 추가합니다. 다른 언어와 환경은 GZIP 및 기타 동등한 압축 도구에 대한 수준의 지원을 가질 수 있습니다. 그리고 당신이 사용하는 각 언어에 대해, 당신은 올바른 압축 및 커뮤니케이션 논리를 직접 상환해야합니다. 이것은 우리가 HTTP 라이브러리에 대해 논의한 것과 비슷한 문제입니다.

GRPC를 언제 사용해야합니까??

만약 너라면&rsquo;서로 밀접하게 통합 해야하는 여러 가지 다른 프로그래밍 언어를 사용하고 많은 데이터를 보내는 빠르고 빈번한 커뮤니케이션이 필요합니다. 그러면 GRPC는 완벽합니다.

  • GRPC 스트리밍으로&rsquo;업로드/다운로드 진행 상황을 쉽게 결정할 수 있습니다 – 불필요한 업데이트 요청을 할 필요없이.
  • 그것&rsquo;요청을 취소 할 수 있습니다.
  • HTTP/2의 모든 이점.
  • GRPC가 귀하의 언어를 지원하는 경우, 당신은하지 않습니다&rsquo;외부 라이브러리에 대해 걱정해야합니다.
  • GRPC는 모든 언어를 지원하지는 않습니다.
  • 스키마는 제한적이고 번거롭게 느낄 수 있습니다.
  • WebSockets에 비해 설정하는 것이 복잡 할 수 있습니다.
  • 여전히 젊고 오류는 디버그하기 어려울 수 있습니다.
  • GRPC와의 통신은 웹 브라우저와 함께 기본적으로 상자에서 작동하지 않습니다. GRPC-WEB 라이브러리를 사용해야합니다.

Webrtc

WEBRTC 프로토콜은 공개 표준 위에 작동하는 응용 프로그램에 실시간 커뮤니케이션 (RTC) 기능을 제공하는 무료 오픈 소스 프로젝트입니다. 동료간에 전송되는 비디오, 음성 및 일반 데이터를 지원합니다.

이 기술은 모든 주요 브라우저를위한 JavaScript API 세트로 ​​제공되며 Android 및 iOS 응용 프로그램과 같은 기본 클라이언트를위한 라이브러리.

WebRTC는 근본적인 방식으로 WebSockets 및 GRPC와 다르며, 일단 연결이 설정되면 데이터를 서버에 닿지 않고 브라우저와 장치간에 직접 전송 될 수 있습니다.

이렇게하면 대기 시간이 줄어들고 오디오, 비디오 또는 화면 공유에 WebRTC가 훌륭합니다. 대기 시간이 낮고 많은 데이터가 전송되어야합니다.

Webrtc 동기 부여

WebRTC.

WebSockets와 같은 다른 솔루션은 두 동료간에 데이터를 전송할 수있게합니다. 그러나이 데이터는 프록시 또는 서버를 통해 전송해야합니다. 다른 서버에 의존하면 대기 시간이 추가됩니다. 두 동료 사이에는 중간 사람이 있습니다. 비디오 스트리밍 또는 실시간 채팅의 경우이 대기 시간은 바람직하지 않습니다.

브라우저는 몇 년 전보다 더 강력합니다. 브라우저는 웹캠 및 마이크에 액세스 할 수 있으므로 내장 API 와이 풍부한 정보를 쉽게 전송할 수있는 방법이 필요합니다. WEBRTC는이 전체 프로세스를 단순화하고 브라우저에서 사용하기 쉬운 API를 노출시키기위한 것입니다.

Webrtc의 문제

동기 부여는 정의되며 WebRTC는 두 동료 간의 더 빠른 의사 소통을 허용하는 마법의 솔루션 인 것 같습니다. 그러나 불행히도 몇 가지 문제가 있습니다.

첫 번째 문제는 피어 투 피어 연결을 설정하는 것이 간단하지 않다는 것입니다. 인터넷은 복잡하며 캘리포니아의 앨리스와 남아프리카의 벤 사이에 많은 라우터, 프록시 및 방화벽이 있습니다. 그리고 어떤 상황에서는 두 동료 사이에 직접적인 선을 가질 수 없습니다. 두 피어 간의 연결은 열린 연결을 방지하는 방화벽을 우회해야 할 수도 있고, 잠재적으로 공개 IP 주소가 없거나 라우터가 동료 간의 직접 연결을 허용하지 않을 수 있습니다.

두 번째 문제는 두 동료가 서로를 발견하고 의사 소통이 일어날 수있는 최적의 경로를 결정할 수있는 방법이 있어야한다는 것입니다. 이를 위해서는 두 클라이언트간에 특정 정보를 공유해야합니다. 서로 가장 잘 의사 소통하는 방법을 알기 전에이 정보를 공유하는 일반적인 방법은 Websockets를 사용하는 것입니다.

조금 재밌습니다. an http 연결이 a로 업그레이드됩니다 WebSocket 정보를 공유하기위한 연결을위한 연결 Webrtc 연결.

WEBRTC가하는 일과 복잡성을 진정으로 이해하고 싶다면 Nat, Stun, Turn, Ice, SDP 및 Signaling과 같은 낯선 용어에 익숙해 져야합니다.

WEBRTC는 어떻게 작동합니까??

위의 개요에서 우리는 WebRTC의 동기를 설명했는데, 이는 그것이 어떻게 작동하는지에 대한 기본 아이디어를 설명합니다. 이 섹션은 WebRTC를 완전히 파악하기 위해 이해해야하는 하위 수준의 주제 중 일부로 뛰어납니다.

네트워크 주소 변환 (NAT)

NAT가 무엇인지 이해하고 작동하는 방법을 이해하는 데 필수적입니다.

NAT는 장치 (노트북 또는 휴대 전화)에게 공개 IP 주소를 제공하는 데 사용됩니다. 이것은 아마도 라우터 뒤에있는 두 동료 사이의 연결을 설정하고 싶기 때문에 중요합니다. 라우터에는 공개 IP 주소가 있으며 라우터에 연결된 모든 장치에는 개인 IP 주소가 있습니다.

이 장치는 어리 석습니다&rsquo;t 인터넷에 직접 노출됩니다. 대신, 모든 트래픽은 라우터를 통과하여 외부 세계와 통신합니다. 원격 서버에서 리소스를 요청하면 라우터가 &ldquo;라우팅&rdquo; 로컬 컴퓨터에서 해당 서버로 요청하고 서버에서 로컬 컴퓨터로의 응답을 라우팅합니다.

이 요청은 장치에서 번역됩니다&rsquo;라우터에 대한 개인 IP 주소&rsquo;고유 한 포트와 함께 공개 IP- NAT 테이블에 저장됩니다. 이런 식으로 로컬 네트워크에 각 장치에 대해 고유 한 공개 IP가 필요하지 않습니다.

Nat 테이블

위의 이미지는 Nat 테이블의 모습에 대한 단순한 예입니다. 허락하다&rsquo;s 개인 IP와 함께 로컬 장치 척 192.168.1.50, 공개 주소를 요청합니다 82.88.31.26:80 일부 데이터의 경우.

이것은 로컬 장치가 먼저 요청을 라우터로 보내는 것으로 보이며, 이는 원격 장치로 요청을 라우팅합니다. 그런 다음 라우터는 원격 장치에 고유 한 포트와 함께 외부 IP 주소에 대한 응답을 보내도록 지시합니다 86.88.71.25 : 8830.

이 고유 한 포트는 라우터가 어떤 로컬 장치를 요청했는지 결정할 수 있으므로 중요합니다. 이 모든 정보는 NAT 테이블에 저장됩니다. 라우터가 응답을 받으면 조회를 수행하고 응답을 전달 해야하는 로컬 장치를 결정할 수 있습니다.

일반 요청/응답 쌍이있을 때 이해하기가 매우 간단합니다. 하나의 장치와 하나의 서버. 그러나 완전히 다른 IP 주소가있는 다른 외부 장치가 이전에 사용 된 것과 동일한 포트에서 라우터의 외부 IP 주소로 패킷을 보내기로 결정하면 어떻게됩니까?? 라우터가 해당 포트 번호에 매핑 된 로컬 장치로 전달해야합니다?

이 결정은 라우터가 사용하는 NAT 번역에 따라 다르며 궁극적으로 피어 투 피어 연결이 설정 될 수 있는지 궁극적으로 결정합니다. 사용하는 라우터에 따라 다른 NAT 번역을 구현합니다. 네 가지 NAT 번역 방법이 있습니다

  • 일대일 Nat
  • 제한된 NAT 주소
  • 포트 제한 Nat
  • 대칭 Nat

일대일 Nat: 하나의 외부 IP 주소와 포트 (일반적으로 공개)를 하나의 내부 IP 주소 및 포트 (일반적으로 비공개)에 매핑합니다. 위의 예에서 라우터가 포트에서 응답을받는 경우 8830 그리고 외부 IP 86.88.71.25, 그것은 로컬 장치로 전달됩니다 192.168.1.50, 그것은 요청을 만든 로컬 장치입니다 (NAT 테이블에서 검색된 정보). 라우터는 대상 IP 또는 응답이 시작된 곳에 신경 쓰지 않습니다. 그 경우&rsquo;S 특정 외부 포트에서 해당 로컬 장치로 이동합니다.

제한된 NAT 주소: 원격 장치는 로컬 장치가 이전에 원격 IP 주소로 패킷을 전송 한 경우에만 로컬 장치로 패킷을 보낼 수 있습니다. 요약하면, 우리는 이전 에이 호스트와 의사 소통 한 경우에만 허용합니다. 위의 예에서는 패킷 만 허용합니다 86.88.71.25.

포트 제한 Nat: 주소 제한 NAT와 동일하지만 제한에는 포트 번호도 포함됩니다. 원격 장치는 내부 장치가 이전에 IP 주소 X와 포트 P로 패킷을 전송 한 경우에만 내부 장치로 패킷을 보낼 수 있습니다. 위의 예에서는 만 허용합니다 86.88.71.25 그리고 포트 80.

대칭 Nat: 가장 제한적입니다. 이것을 위해 외부 IP, 외부 포트, 대상 IP, 그리고 목적지 포트 모두 NAT 테이블에 존재하는 것을 일치시켜야합니다. 즉, 해당 장치가 대상 IP 및 포트를 요청한 경우 패킷이 로컬 장치의 특정 포트로만 전송 될 수 있음을 의미합니다.

WebRTC.

NAT를위한 세션 트래버스 유틸리티 (Stun)

Stun은 NAT를 통해 공개 IP 주소/포트를 알려주고 피어와 직접 연결을 방지하는 라우터의 제한을 결정하는 프로토콜입니다. Stun Server는 클라이언트가 NAT의 존재와 NAT 유형을 발견하고 NAT의 외부 IP 주소 및 포트 매핑을 결정하는 메커니즘입니다.

기절 요청의 목적은 귀하의 대중의 존재를 결정 하여이 대중의 존재를 다른 사람과 의사 소통하여 귀하와 연결할 수 있도록하는 것입니다.이 커뮤니케이션은 신호라고합니다.

그것은 작동합니다 1-1, 주소 제한, 그리고 포트 제한 Nat. 그러나 효과가 없습니다 대칭 Nat. 홍보에 대한 STUN 서버를 요청할 때, 그 커뮤니케이션 쌍은 특히 클라이언트를 위해 만들어졌습니다. 대칭 NAT를 사용하여 다른 피어를 참여시킬 수는 없습니다. 로컬 장치의 포트를 통한 통신은 STUN 서버로 제한됩니다.

기절 서버는 가볍고 유지하기에 저렴합니다. 무료로 쿼리 할 수있는 공개 스턴 서버가 있습니다.

아래 이미지는 Stun이 작동하는시기와 피어 투 피어 연결을 설정할 수있는 시점을 보여줍니다.

WebRTC Stun Server- 작동 할 때

반면에 피어 투 피어 연결을 설정할 수없는 경우, 예를 들어 피어가 대칭 NAT 뒤에있을 때 3 단계의 최종 연결은 허용되지 않습니다. STUN 서버와 초기 연결이 설정되었으므로 다른 피어는 해당 연결 정보를 사용할 수 없습니다.

직접 연결을 설정할 수없는 이와 같은 경우 턴 서버를 사용해야합니다.

NAT 주변의 릴레이를 사용한 트래버스 (Turn)

Turn은 두 동료간에 직접 연결을 설정할 수없는 경우 네트워크 트래픽을 릴레이하기위한 프로토콜입니다. 예를 들어, 한 피어가 대칭 NAT 뒤에있는 경우 피어 간 트래픽을 전달하려면 전용 서버가 필요합니다. 이 경우 턴 서버와 연결을 만들고 모든 피어에게 패킷을 서버로 보내라고 말하면 전달됩니다.

이것은 오버 헤드와 함께 제공되며 턴 서버는 유지 관리 및 실행 비용이 많이들 수 있습니다.

다음 이미지는 턴 서버가 두 명 이상의 동료간에 메시지를 전달하는 데 사용되는 방법을 보여줍니다.

WebRTC 회전 서버

대화식 연결 설정 (ICE)

Ice는 기절 및 회전 프로토콜의 조합을 사용하여 호스트가 서로의 공개 IP 주소를 발견하고 직접 연결을 설정할 수있는 메커니즘을 제공합니다. 직접 연결이 불가능한 경우 ICE는 Turn을 사용하여 두 호스트간에 릴레이 연결을 설정합니다.

잠재적으로 연결을 설정하는 이러한 가능한 모든 방법은 ICE 후보라고합니다. 수집 된 모든 주소는 SDP를 통해 원격 피어에게 전송되며 다음에 탐색 할 것입니다. WebRTC는이 정보를 각 고객에게 사용하여 다른 피어에 연결하는 가장 좋은 방법을 결정합니다. 두 동료가 동일한 NAT에 있고 로컬 연결이 설정 될 수 있거나 두 피어가 대칭 NAT 뒤에 있고 턴 서버를 사용하여 릴레이가 필요할 수 있습니다.

세션 설명 프로토콜 (SDP)

SDP는 기본적으로 세션 공지, 세션 초대 및 기타 세션 시작을위한 미디어 세션을 설명하기위한 데이터 형식입니다. 해상도, 형식, 코덱 및 암호화와 같은 연결의 멀티미디어 컨텐츠를 설명하는 표준입니다.

중요하게는&rsquo;S ICE 후보 및 기타 네트워킹 옵션을 설명하는 데 사용됩니다. Peer A가 동료 B에 연결하려면 연결하려면 SDP 정보를 공유해야합니다. 이 SDP가 공유되는 방법은 전적으로 최대입니다. 이것은 신호라고하며 다음에 탐색 할 것입니다.

신호 – 연결 설정

신호는 두 장치간에 제어 정보를 전송하여 통신 프로토콜, 채널, 미디어 코덱 및 형식, 데이터 전송 방법 및 필요한 라우팅 정보를 결정하는 프로세스입니다. WEBRTC의 신호 과정에 대해 알아야 할 가장 중요한 사항 : 사양에 정의되어 있지 않습니다.

피어 연결은 다른 컴퓨터에 두 개의 응용 프로그램 연결을 처리합니다. Signaling이라는 발견 및 협상 프로세스를 통해 연결이 설정됩니다.

중요한 경고는 WEBRTC가 사양의 일부로 신호를 내장하지 않았다는 것입니다. 두 장치가 서로 직접 접촉 할 수 없기 때문에 우리는 이전에 자세히 살펴 보았습니다. 두 명의 동료가 WEBRTC를 사용하여 연결하려면 서로의 SDP 데이터가 필요합니다.

따라서 두 장치 가이 정보를 공유 할 수있는 방법을 설정하는 것은 개발자로서 귀하에게 달려 있습니다. 인기있는 옵션은 WebSockets 또는 신호 정보가 이메일로 앞뒤로 전송되거나 도보로 전달되어 수동으로 입력하여 연결을 설정할 수 있습니다.

이 정보가 공유되면 두 명의 동료가 WEBRTC 연결을 설정하는 데 필요한 모든 것이 있으면 직접 연결되어 있거나 턴 서버를 통해 발생할 수 있습니다.

언제 webrtc를 사용해야합니까??

당신은 물어볼 수도 있습니다 : 왜 내가 webrtc를 사용해야하는지? 이해하기가 복잡해 보이고 설정이 훨씬 더 복잡해 보입니다.

설정하는 것은 복잡하지만 많은 이점이 있습니다

  • API는 사용하기 쉽고 브라우저에서 직접 사용할 수 있습니다.
  • 성능이 우수하여 비디오 또는 오디오와 같은 높은 대역폭 컨텐츠를 전송할 수 있습니다.
  • 화면 공유 및 파일 공유와 같은 고급 기능을 쉽게 구현할 수 있습니다.
  • 대기 시간 감소로 피어 투 피어 연결을 지원합니다.
  • 무료 및 오픈 소스.
  • 내장 신호가 없습니다.
  • Stun & Turn 서버를 유지해야합니다.
  • 그룹 연결 (예 : 그룹 화상 통화)의 경우 SFU가 필요할 수 있습니다.
  • 설정하고 이해하기가 복잡합니다.

당신이 선택해야합니다?

선택한 프로토콜은 특정 요구에 따라 다릅니다.

http: HTTP/2를 사용하면 이제 클라이언트와 서버 간의 양방향 통신이 가능합니다. 응용 프로그램에 따라 완전한 이중 통신이 필요하지 않을 수 있으며 SSE와 같은 것이 충분합니다. 우리는 또한이 기사에서 WebSockets와 GRPC가 HTTP에 의존하고 있으며 WebRTC는 신호를위한 다른 채널이 필요하다는 것을 발견했습니다. 그것&rsquo;S 다른 프로토콜을 탐구하기 전에 HTTP가 애플리케이션 요구를 해결하는지 먼저 탐색 할 가치가 있습니다.

websockets 채팅 애플리케이션과 같은 양방향 통신이 필요한 실시간 응용 프로그램에 가장 적합합니다. 또한 설정 및 사용이 비교적 쉽습니다. 그러나 Websockets는 GRPC 또는 WEBRTC만큼 효율적이지 않으며 많은 데이터를 보내야하는 응용 프로그램에 적합하지 않습니다.

grpc WebSockets보다 더 효율적인 프로토콜이며 많은 데이터를 전송 해야하는 응용 프로그램에 더 적합합니다. 그러나 GRPC는 WebSockets보다 설정 및 사용이 더 복잡합니다. 작은 API 호출을 많이해야한다면 GRPC는 좋은 선택입니다. 또는 통신 해야하는 다양한 프로그래밍 언어로 마이크로 서비스를 구현할 때 GRPC&rsquo;S 직렬화 된 구조화 된 데이터 및 코드 생성은 많은 시간을 절약 할 수 있습니다. 그것&rsquo;또한 당신이 할 수 있다는 점도 주목할 가치가 있습니다&rsquo;t 브라우저에서 GRPC를 쉽게 사용하십시오. 이를 위해서는 통화를 번역하는 백엔드에 전용 프록시가 필요합니다. GRPC -WEB 참조.

Webrtc 브라우저와 장치 간의 대기 시간이 낮은 실시간 통신을위한 가장 효율적인 프로토콜이며 많은 데이터를 보내야하는 응용 프로그램에 적합합니다. WebRTC는 또한 브라우저에서 직접 사용할 수있는 사용하기 쉬운 API를 제공하므로 카메라, 오디오, 화면 또는 기타 파일을 쉽게 공유 할 수 있습니다. 그러나 WEBRTC.

결론

미래는 더 많은 프로토콜, 변경 및 추가 개선을 볼 수 있습니다. HTTP/3은 이미 출시되었으며 WebTransport라는 새로운 통신 프로토콜도 있습니다.

이 기사가 유용하고 정보에 입각 한 결정을 내리는 데 도움이되기를 바랍니다. 토론을 계속하려면 Twitter 또는 LinkedIn에서 저희에게 연락하십시오.

WEBRTC 대 HLS : 스트리밍 프로토콜 간의 비교

이 블로그 게시물은 가장 인기있는 스트리밍 프로토콜 중 하나 인 WEBRTC와 HLS를 비교합니다. 각 프로토콜의 장단점을 검사하고 응용 프로그램을 탐색합니다. 또한 포스트는 스트리밍에 더 나은 개요를 제공하므로 독자가 필요에 맞는 적절한 기술을 선택할 수 있습니다.

ashik ts

2023 년 2 월 22 일

WEBRTC 대 HLS : 스트리밍 프로토콜 간의 비교

오늘날의 디지털 시대에는 스트리밍 프로토콜이 미디어를 소비하고 공유하는 데 필수적이되었습니다. 라이브 스트림에서 신청에 이르기까지 스트리밍 프로토콜은 언제 어디서나 콘텐츠에 액세스 할 수있었습니다. 그러나 많은 옵션을 사용할 수 있으므로 귀하의 요구에 가장 적합한 것을 아는 데 시간과 노력이 필요할 수 있습니다. 이 기사에서는 가장 인기있는 스트리밍 프로토콜 중 두 가지를 살펴 보겠습니다 : WebRTC와 HLS, 비교하고 정보에 입각 한 결정을 내릴 수 있도록 도와줍니다.

Webrtc는 무엇입니까??

WebRTC는 W3C가 개발 한 무료 및 오픈 소스 프로토콜입니다. 음성 및 화상 통화, 온라인 회의 및 채팅과 같은 실시간 커뮤니케이션이 가능합니다. WEBRTC는 최근 저도, 고품질 비디오 및 오디오 스트림을 제공 할 수있는 능력으로 인해 최근에 두드러졌습니다.

Webrtc의 응용

다음은 WebRTC의 가장 자주 사용되는 사용 사례입니다

  • 음성 및 화상 통화 : WebRTC의 가장 인기있는 사용 사례 중 하나는 음성 및 화상 통화입니다. 두 명 이상의 사람들 간의 실시간, 저도 커뮤니케이션을 허용합니다. 비즈니스는이 기능을 소셜 네트워킹 및 온라인 데이트를위한 내부 커뮤니케이션, 협업 및 소비자 대면 앱에 널리 사용합니다.
  • 온라인 회의 : WEBRTC의 또 다른 인기있는 유스 케이스는 온라인 회의입니다. 여러 사용자가 가상 ​​회의실에 가입하고 비디오 및 오디오를 통해 서로 상호 작용할 수 있으며 화면 및 문서를 공유 할 수 있습니다. 기업은이 기능을 원격 회의 및 프레젠테이션뿐만 아니라 온라인 수업 및 강의를위한 교육 기관에 널리 사용합니다.
  • 채팅: WebRTC는 또한 채팅을 통해 실시간 텍스트 기반 커뮤니케이션을 가능하게합니다. 이 기능은 소셜 네트워킹, 온라인 게임 및 고객 지원과 같은 다양한 앱 및 플랫폼에 통합 될 수 있습니다. 즉각적인 의사 소통을 허용하고 다양한 상황에서 사용자 경험을 향상시키는 데 사용할 수 있습니다.

HLS는 무엇입니까??

HLS (HTTP 라이브 스트리밍)는 Apple이 개발 한 적응 형 비트 전송선 스트리밍 프로토콜입니다. 모바일 장치 및 데스크탑 브라우저에서 라이브 스트리밍에 널리 사용됩니다. HLS는 HTTP 프로토콜과 함께 작동하도록 설계되었으며 기존 HTTP 기반 인프라에 쉽게 통합 될 수 있습니다.

HLS의 응용

다음은 HLS가 오늘날의 시대에 사용되는 가장 일반적인 방법 중 일부입니다

  • 라이브 스트리밍 : HLS는 스포츠, 콘서트 및 뉴스 방송과 같은 라이브 스트리밍 행사에 널리 사용됩니다. 이 프로토콜은 트래픽이 많은 트래픽을 처리하고 시청자에게 원활한 스트리밍 경험을 제공하도록 설계되었습니다. 적응 형 비트 레이트 기능을 사용하면 스트림이 뷰어의 인터넷 연결에 조정하여 더 나은 시청 경험을 제공합니다.
  • 주문형 비디오 (VOD) : HLS는 일반적으로 영화, TV 쇼 및 비디오 자습서와 같은 주문형 비디오 (VOD) 콘텐츠에 일반적으로 사용됩니다. 이 프로토콜은 컨텐츠 관리 시스템과 쉽게 통합 할 수 있으며 적응 형 비트 전송률을 가진 시청자를위한 원활한 스트리밍 경험을 제공합니다.
  • IPTV 및 OTT : HLS는 스트리밍 텔레비전 및 비디오 서비스와 같은 IPTV 및 OBT (Over-Top) 서비스에도 사용됩니다. 트래픽이 많은 트래픽을 처리하고 원활한 스트리밍 경험을 제공하는 프로토콜의 기능은 이러한 응용 프로그램에 인기있는 선택입니다.
  • 모바일 스트리밍 : HLS는 iOS 및 Android 플랫폼 모두에서 지원되므로 모바일 스트리밍에도 인기가 있습니다.
  • 엔터프라이즈 커뮤니케이션 : HLS는 Enterprise Communication 플랫폼에서 직원들이 비디오를 스트리밍하고 화면 공유 및 오디오/화상 통화를 할 수 있도록하며 원활한 스트리밍 경험을 제공하고 대부분의 장치와 호환되므로 오디오/화상 통화를 할 수 있습니다.

WebRTC 대 HLS : 상세한 비교

특징 Webrtc HLS
브라우저 지원 Chrome, Firefox, Safari, Edge (플러그인 포함) Safari, Chrome, Edge, Firefox (플러그인 포함)
장치 지원 Windows, MacOS, Linux, iOS, Android iOS, Android, MacOS, Windows
코덱 지원 vp8, vp9, h.264, h.265 시간.264, h.265
지연 시간 낮은 높은
보안 높은 중간
비디오 품질 높은 높은
배달 방법 피어 투 피어 서버 기반
확장 성 높은 높은
호환성 제한된 넓은

사용할 프로토콜을 결정할 때는 대기 시간, 보안, 비디오 품질, 전달 방법, 확장 성 및 호환성과 같은 요소를 고려하는 것이 중요합니다.

지연 시간

대기 시간과 관련하여 WebRTC는 HLS보다 분명한 이점이 있습니다. WebRTC는 실시간 커뮤니케이션을 사용합니다. 즉, 비디오가 즉시 시청자에게 전달됩니다. 반면에 HLS는 버퍼링 메커니즘을 사용하여 비디오 전달을 지연시킵니다. 네트워크 조건에 따라이 지연은 몇 초에서 몇 분 거리에있을 수 있습니다. 이러한 요소는 라이브 화상 채팅 및 온라인 게임과 같은 낮은 대기 시간이 필요한 사용 사례에 WebRTC를 더 적합하게 만듭니다.

보안

WEBRTC와 HLS는 모두 암호화를 사용하여 비디오 스트림을 보호합니다. 그러나 각 프로토콜이 제공하는 보안 수준은 다릅니다. WebRTC는 SRTP (Secure Real-Time Transport Protocol)를 사용하여 비디오 스트림을 암호화하며 가장 안전한 암호화 방법 중 하나로 간주됩니다. 반면에 HLS는 HTTP Secure (HTTPS) 프로토콜을 사용하여 비디오 스트림을 암호화합니다. HTTPS는 안전한 것으로 간주되지만 SRTP는 덜 안전합니다. 이러한 이유로 인해 WEBRTC는 금융 거래 및 정부 커뮤니케이션과 같은 높은 수준의 보안이 필요한 사용 사례에 더 적합합니다.

비디오 품질

WEBRTC와 HLS는 모두 고품질 비디오를 제공 할 수 있습니다. 그러나 각 프로토콜에서 제공하는 비디오 품질은 네트워크 조건에 따라 다를 수 있습니다. WebRTC. 이것은 저 대역폭 네트워크에서도 비디오 품질이 높아질 것임을 의미합니다. 반면에 HLS는 사전 세그먼트 된 비디오 전달 메커니즘을 사용하여 저 대역폭 네트워크에서 버퍼링 및 말더듬으로 이어질 수 있습니다. 결과적으로 WebRTC는 저 대역폭 네트워크에서 고품질 비디오가 필요한 사용 사례에 더 적합합니다.

배달 방법

WebRTC 및 HLS는 다른 전달 방법을 사용하여 비디오를 스트리밍합니다. WebRTC. 이것은 서버로드를 줄이고 비디오 스트림의 확장 성을 향상시킵니다. 반면에 HLS는 클라이언트-서버 전달 방법을 사용하므로 비디오가 서버에서 뷰어로 전달됩니다. 이로 인해 확장 성 문제가 발생할 수 있습니다. 결과적으로 WebRTC.

확장 성

WEBRTC 및 HLS는 확장 성 특성이 다릅니다. WebRTC는 P2P 전달 방법을 사용하여 서버의 부하를 줄이고 비디오 스트림의 확장 성을 증가시킵니다. 반면에 HLS는 클라이언트 서버 전달 방법을 사용하여 특히 최고 트래픽 시간 동안 확장 성 문제로 이어질 수 있습니다. 결과적으로 WebRTC.

호환성

WebRTC와 HLS는 호환성 특성이 다릅니다. WebRTC는 Chrome, Firefox 및 Safari를 포함한 대부분의 최신 브라우저와 호환됩니다. 그러나 Internet Explorer 및 Edge와 호환되지 않습니다. 반면 HLS는 Chrome, Firefox, Safari, Internet Explorer 및 Edge를 포함한 대부분의 최신 브라우저와 호환됩니다. 이로 인해 HLS는 광범위한 브라우저 및 장치와의 호환성이 필요한 사용 사례에 더 적합합니다.

Webrtc 대 HLS : 더 좋습니다?

Webrtc 저하, 실시간 스트리밍 애플리케이션을위한 훌륭한 옵션입니다. 음성 및 화상 통화, 온라인 회의 및 채팅과 같은 사용 사례에 적합합니다. 반면에, HLS 라이브 비디오를 많은 청중에게 스트리밍하는 훌륭한 옵션입니다. 라이브 스포츠 스트리밍, 콘서트 및 확장 성이 높은 기타 이벤트와 같은 사용 사례에 특히 적합합니다. 다양한 네트워크 조건에 적응할 수있는 HLS의 능력.

또한 HLS는 콘텐츠의 저작권 보호를 더 잘 지원하여 프리미엄 콘텐츠 스트리밍에 선호되는 선택입니다. 호환성과 관련하여 HLS는 WebRTC보다 약간 우위에 있습니다. HLS는 널리 지원되므로 더 많은 청중에게 컨텐츠를 스트리밍하기위한보다 다양한 옵션입니다. 그러나 이것은 약간 높은 대기 시간의 비용으로 발생합니다.

주요 초점이 실시간, 저도 스트리밍 인 경우 WebRTC가 더 나은 선택 일 수 있습니다. 그렇지 않으면 주요 초점이 확장 성과 호환성에 중점을두면 HL이 더 나은 선택 일 수 있습니다.

결론

결론적으로, WEBRTC와 HL은 자체 고유 한 기능과 사용 사례가있어 다양한 유형의 스트리밍에 적합합니다. WebRTC는 낮은 대기 시간, 음성 및 화상 통화와 같은 실시간 커뮤니케이션, 온라인 회의 및 채팅에 가장 적합합니다. 반면, HLS는 광범위한 장치에서 사전 녹음 된 비디오의 고품질 스트리밍에 가장 적합합니다.

FAQ

1. WEBRTC는 TCP 또는 UDP를 사용합니까??

WebRTC는 전송되는 데이터 유형에 따라 TCP와 UDP를 모두 사용합니다. 메시지 제어를 위해 TCP를 사용하고 미디어 스트리밍을위한 UDP.

2. YouTube는 HLS를 사용합니까??

예, YouTube는 HLS (HTTP 라이브 스트리밍)를 스트리밍 프로토콜 중 하나로 사용하여 시청자에게 비디오를 전달합니다.

삼. WebRTC는 브라우저에만 해당됩니다?

WebRTC는 주로 브라우저 기반 기술이지만 WebRTC 라이브러리를 통해 기본 앱에서도 사용할 수 있습니다.

4. Netflix는 WebRTC를 사용합니까??

아니요, Netflix는 스트리밍에 WebRTC를 사용하지 않습니다. 그들은 HTTP 라이브 스트리밍 (HLS)을 기반으로하는 HTTP (ASOH)를 통한 적응 스트리밍이라는 자체 독점 기술을 사용합니다.