问题描述
所以我有一个通过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)-就是这样。