장고 channels

180.81.16.23 (토론)님의 2022년 10월 12일 (수) 10:53 판

1 개요

Channels. 공식링크를 참고하였다. 사용하는 장고 버전에 따라 진행방식에 차이가 있을 수 있으니 유의하자.

1.1 버전별 호환

channel 버전 django 버전 비고
3 2.2 이상
4

장고는 기본적으로 동기식으로, WebSockets, chat protocols, IoT protocols 등을 위해선 비동기식 처리가 필요하다. 이를 위해 Django Channels가 마련되어 있다.

ASGI(Async Server Gateway Interface)프로토콜을 토대로 작동하는데, WSGI를 계승하여 이와 잘 호환되도록 설계되어 있다.

ASGI는 비동기 요청인 웹 소켓을 처리하는 이벤트로 connect, send, receive, disconnect가 있다.


1.2 패키지 설치

과정 설명 방법
패키지 설치 Channels 패키지를 설치한다. pip install -U channels
앱 등록 settings.py에 추가.

channels는 runserver명령을 제어하여 기존 서버를 대체한다.

runserver에 관여하는 다른 앱이 없다면 문제 없이 작동한다.

INSTALLED_APPS 하위, 가장 처음에 'channels'넣는다.
INSTALLED_APPS = [
    'channels',  # 다른 서드파티 앱과 충돌할 수 있어 가장 처음에 둔다.
    ...  # 공식 튜토리얼에선 'chat'을 상위로 올리지만, 아래에 있어도 상관 없다.
    ...
    'chat',
asgi.py 설정 프로젝트의 asgi.py를 다음과 같이 편집한다.

(장고 2.2라면 asgi.py가 없어 새로 작성해주어야 한다.)

- 라우팅 설정 작성 가장 상위의 디렉터리에 routing.py를 다음과 같이 작성한다.

(취향에 따라 달리 작성해도 된다.)

from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # (http->django views is added by default)
})
설정 추가 settings.py 안에 우측의 내용을 추가한다.

라우팅파일의 위치만 잘 잡아주면 된다.

ASGI_APPLICATION = 'routing.application'  # routing.py 파일의 application을 불러온다.
(라우팅 파일 안의 application을 가져온다.)