Python Django频道-更好地隔离WebSocket服务器吗?

问题描述

所以我有一个通过API(django-restframework)通过React前端运行的Django应用程序,我想用Django Channels实现一些websocket动作(实时事件),创建另一个服务器更好吗? websocket连接还是将所有功能集成到一个应用程序中?我知道它将更改为Asgi,但是之后不知道它会导致HTTP连接或导致其故障的原因。谢谢。

解决方法

ASGI应用程序堆栈的顶层是ProtocolTypeRouter,其定义如下:

### this is in routing.py,silbling to your root urls.py
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter,URLRouter
import <yourApp>.routing
from django.conf.urls import url


application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            <yourApp>.routing.websocket_urlpatterns
        ),),})

此外,您必须在yourApp.routing.py中定义如下的websocket_url模式:

### this is in your <websocketAppDir>/routing.py
websocket_urlpatterns = [re_path(r'ws/<yourApp>/(?P<whatEver>[\w\-.]+)/$',consumers.MsgSignalConsumer),]

到目前为止,频道部分。现在HTTP协议:Http协议请求将从此ProtocolTypeRouter传递到django的标准路由,因此所有django hhtp请求都保持不变。 并提供全面服务。

底线:您切换到asgi.py,在其中进行定义

application = get_default_application()  ### channels asgi

设置频道(ProtocolTypeRouter)-就是这样。