将Django转换为WebSocket服务器
WebSocket 服务器开启后,可以实现以下功能。


安装 wscat 在 Arch Linux 上
yay -S wscat
Django配置
參考頁面:
使用WebSocket進行Django服務器推送
開始使用Channels
使用的 Django 版本是什么。
>>> import django
>>> django.get_version()
'2.0.2'
安装渠道
pip install django channels
创建Django项目
django-admin startproject ws
cd ws
python manage.py startapp sample
Django 运行测试
python manage.py runserver

确认 Django 基础可运行后,将其改装为 WebSocket 服务器。
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",
    },
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),
]
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)
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),
]
from django.conf.urls import url
from . import views
urlpatterns = [
    # 127.0.0.1:8000/sample/publish でメッセージを送れるようにする
    url(r'^publish$', views.publish, name='publish'),
]
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=おはようございます。