인프런 커뮤니티 질문&답변

kth050213님의 프로필 이미지
kth050213

작성한 질문수

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

채널레이어를 활용한 프로세스간 통신

동기방식의 consumer 클래스와 비동기방식의 consumer클래스의 차이가 뭔지 궁금합니다.

작성

·

346

·

수정됨

0

 1. 동기방식의 consumer 클래스와 비동기방식의 consumer클래스의 차이가 뭔지 궁금합니다.

  1. jsonwebsocketconsumer에서 모델을 임포트하여 db를 수정해도 문제가 없을까요??

  2.  

  3. 웹소켓에 연결할때 마가 하나의 연결당 하나의 consumer가 생성되는건가요??

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

  1. 파이썬 3.5부터 async/await 문법을 사용하여 비동기 코드를 작성할 수 있으며, asyncio라는 내장 모듈을 사용하여 비동기 작업을 관리할 수 있게 되었습니다.

    1. Async Consumer가 기본 구현이며, Sync Consumer는 Async Consumer를 래핑하는 구조이며, sync_to_async 장식자를 통해 Async Consumer의 기능을 활용합니다.

      1. 관련 코드 : https://github.com/django/channels/blob/4.0.0/channels/consumer.py#L117

    2. async에 대해서는 대개 익숙하지 않기 때문에 Sync Consumer로 학습하시고, 이후에 Sync Consumer로 구현된 코드를 Async Consumer로 변경해서 서비스하시길 권해드립니다.

  2. Consumer를 포함한 장고 내 어떤 곳에서든 모델을 포함한 데이터베이스 접근을 하실 수 있습니다. 어떤 문제가 예상되시나요?

  3. 옙. 말씀하신 대로, 서버 단에서는 웹소켓 연결을 물고 연결을 유지를 책임질 대상이 필요하고, Consumer가 그러한 역할을 합니다. 매 웹소켓 연결마다 Consumer Instance가 생성되어 각 웹소켓 연결을 담당하게 됩니다.

살펴보시고, 댓글 남겨주세요.

화이팅입니다. :-)

kth050213님의 프로필 이미지
kth050213
질문자

  1. 제가 찾아본 정보로는 동기구현과 비동기구현은 성능차이만 있다는데 그것이 맞나요??

  2. 맞다면 왜 그런것인가요??

  3. jsonwebsocketconsumer를 async로 바꾸면 안에서 모델을 조작하는 부분에 sync_to_async를 해주고 원래 async_to_sync만 없애주면 되나요??

  4.  

kth050213님의 프로필 이미지
kth050213

작성한 질문수

질문하기