[django-channels] 채널 요약

채널이란 무엇입니까?

 

채널은 Django를 확장하여 두가지 중요한 기능을 허용하는 새로운 레이어를 추가합니다.

  • 일반 뷰와 매우 유사한 방식으로 웹소켓 처리
  • Django와 동일한 서버에서 실행되는 백그라운드 작업

It allows other things too, but these are the ones you’ll use to start with.

어떻게?

Django는 두 가지 프로세스 유형으로 구분됩니다.:

  • HTTP 및 웹 소켓을 처리
  • 뷰, 웹소캣 처리 그리고 백그르카운드 작업(consumers) 실행

이것들은 ASGI라는 프로토콜을 통해 통신합니다. ASGI는 WSGI와 유사하지만 네트워크를 통해 실행되며 더 많은 프로토콜 유형을 허용합니다.

채널은 asyncio, gevent 또는 다른 비동기 코드를 Django 코드에 도입하지 않습니다.; 모든 비즈니스 로직은 woker 프로세스 또는 스레드 내에서 동기적으로 실행됩니다.

장고를 어떻게 바꾸어야합니까?

아니요, 모든 새로운 것들은 전적으로 선택 사항입니다. 그러나 원하는 경우 WSGI 서버에서 Django를 실행하는 것으로부터 다음과 같이 실행하도록 변경할 수 있습니다.:

  • ASGI 서버, 아마도 Daphne
  • Django worker servers, using manage.py runworker
  • Something to route ASGI requests over, like Redis.

채널을 실행할 때조차도 기본적으로 모든 HTTP 요청을 Django보기 시스템으로 라우팅하므로 이전과 같이 작동합니다..

Channels가 제공하는 기능?

기타 기능은 다음과 같습니다:

  • 한 번에 수천 명의 고객을 위한 쉬운 HTTP long-poll 지원
  • WebSocket에 대한 전체 세션 및 인증 지원
  • 사이트 cookies 기반으로 WebSocket 자동 사용자 로그인
  • 이벤트의 대량 트리거를위한 내장 기본 요소 (채팅, 라이브 블로그 등)
  • 새로운 작업자가 가동되는 동안 브라우저가 일시 중지 된 상태의 중단 시간 배포
  • URL 단위로 선택적 로우 레벨 HTTP 컨트롤
  • 다른 프로토콜 또는 이벤트 소스 (예 : WebRTC, 원시 UDP, SMS)에 대한 확장 성

확장 가능한가요??

예, 유스 케이스에 맞게 프로토콜 서버 (HTTP 및 WebSocket을 지원하는 프로토콜 서버)와 작업 서버 (장고 코드를 실행하는 프로토콜 서버)를 원하는대로 실행할 수 있습니다.

ASGI 스펙은 서로 다른 여러 채널 계층을이 두 구성 요소 사이에 서로 다른 성능 특성으로 연결할 수있게 해주 며, 자체의 프로토콜 및 작업자 서버로 별도의 클러스터를 실행할 수있는 기능뿐 아니라 쉬운 샤딩 (sharding) 기능을 모두 지원하도록 설계되었습니다.

왜 내가 좋아하는 메시지 대기열을 사용하지 않습니까?

채널은 낮은 대기 시간 (목표는 수 밀리 초)과 보증 된 배달보다 높은 처리량 (일부 메시지 대기열 디자인과 일치하지 않음)을 선호하도록 의도적으로 설계되었습니다.

메시지의 보장 된 주문과 같은 일부 기능은 성능 저하를 가져 오지만 메시지 대기열을 더 많이 만들도록 선택합니다.

모든 코드를 비동기식으로 만드는 것에 대해 걱정할 필요가 있습니까?

아니요, 모든 코드가 소켓이나 이벤트 루프없이 동 기적으로 실행됩니다. Django 뷰 또는 채널 소비자 내에서 비동기 코드를 사용할 수 있습니다 (예 : 많은 수의 URL을 병렬로 가져 오는 경우와 같이).하지만 배포 된 전체 사이트에는 영향을 미치지 않습니다.

장고의 어떤 버전이 함께 작동합니까?

Django> = 1.8 용 라이브러리로 채널을 설치할 수 있습니다. 몇 가지 추가 의존성이 있지만, pip를 사용하면 이들 모두가 설치됩니다.

Official project

채널은 처음에는 장고 코어에 포함되어 있지 않지만, 2016 년 9 월 이후 공식 Django 프로젝트입니다. 공식 프로젝트로 채택되는 채널에 대한 자세한 내용은 Django 블로그에서 확인할 수 있습니다.