Django를 WebSocket 서버로 만들기
소스 클라이언트
http://127.0.0.1:8000/sample/publish?msg=안녕하세요.
수신 클라이언트
wscat --connect htp://127.0.0.1:8000/ws
Arch Linux에 wscat을 설치하려면
yay -S wscat
장고 설정
참고로 한 페이지
Django에서 WebSocket으로 서버 Push
Getting Started with Channels
사용한 Django 버전
>>> import django
>>> django.get_version()
'2.0.2'
channels 설치
pip install django channels
장고 프로젝트 만들기
django-admin startproject ws
cd ws
python manage.py startapp sample
장고의 동작 확인
python manage.py runserver
브라우저에서 http://127.0.0.1:8000/ 방문
Django의 기본이 작동하는지 확인한 후 WebSocket 서버로 개조하십시오.
ws/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sample',
'channels',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
APPEND_SLASH = False
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "sample.routing.channel_routing",
},
ws/urls.py
from django.contrib import admin
from django.urls import include, path
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^sample/', include('sample.urls')),
url(r'^admin/', admin.site.urls),
]
sample/consumers.py
from channels import Group
# WS が繋がってきたら sample というグループに参加させる
def ws_add(message):
message.reply_channel.send({"accept": True})
Group("sample").add(message.reply_channel)
# WS が切れたら sample というグループから外させる
def ws_disconnect(message):
Group("sample").discard(message.reply_channel)
sample/routing.py
from channels.routing import route
# 先ほど作った sample/consumers.py から引っ張ってきてるだけ
from sample.consumers import ws_add, ws_disconnect
channel_routing = [
# path を指定する 127.0.0.1:8000/ws に繋げるという感じ
route("websocket.connect", ws_add, path = r'^/ws$'),
route("websocket.disconnect", ws_disconnect),
]
sample/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
# 127.0.0.1:8000/sample/publish でメッセージを送れるようにする
url(r'^publish$', views.publish, name='publish'),
]
sample/vies.py
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from channels import Group
def publish(request):
msg = request.GET.get('msg', 'null')
Group("sample").send({"text": msg})
return HttpResponse("Published!")
그리고 서버 실행
pyrhon manager.py runserver
수신 대기
wscat --connect http://127.0.0.1:8000/ws
브라우저에서 메시지 보내기
http://127.0.0.1:8000/sample/publish?msg=おはようございます。
Reference
이 문제에 관하여(Django를 WebSocket 서버로 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ekzemplaro/items/a6b81bd1d181fdd0cc24텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)