django - WebSocket 失败:WebSocket 握手期间出错
问题描述
我正在尝试使用 django-channels 为 django 应用程序创建一个 Web 套接字。我已将 django 更改为使用ASGI
服务器接口而不是默认接口,WSGI
并且我定义了以下通道层:
设置.py
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'asgi_redis.RedisChannelLayer',
'CONFIG': {
'hosts': [('localhost', 6379)],
},
'ROUTING': 'rest.routing.application',
}
}
ASGI_APPLICATION = 'rest.routing.application'
asgi.py
import os
import django
from channels.routing import get_default_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rest.settings")
django.setup()
application = get_default_application()
路由.py
application = ProtocolTypeRouter({
"websocket": URLRouter([
url(r"^receive/$", websocket_receive),
url(r"^connect/$", websocket_connect),
])
})
消费者.py
def websocket_connect(self, event):
self.send({
"type": "websocket.accept",
})
问题是当我尝试测试它时
socket = new WebSocket("ws://" + window.location.host + "/connect/");
socket.onopen = function() {
socket.send("hello world");
}
我不断得到
WebSocket 连接到“ws://localhost:8000/connect/”失败:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET
[Failure instance: Traceback: <class 'AttributeError'>: 'dict' object has no attribute 'send'
C:\Python37\lib\site-packages\autobahn\websocket\protocol.py:2800:processHandshake
C:\Python37\lib\site-packages\txaio\tx.py:429:as_future
C:\Python37\lib\site-packages\twisted\internet\defer.py:151:maybeDeferred
C:\Python37\lib\site-packages\daphne\ws_protocol.py:77:onConnect
--- <exception caught here> ---
C:\Python37\lib\site-packages\twisted\internet\defer.py:151:maybeDeferred
C:\Python37\lib\site-packages\daphne\server.py:186:create_application
C:\Python37\lib\site-packages\channels\staticfiles.py:41:__call__
C:\Python37\lib\site-packages\channels\routing.py:58:__call__
C:\Python37\lib\site-packages\channels\routing.py:144:__call__
C:.......\consumers.py:28:websocket_connect
知道这里可能出了什么问题吗?
解决方案
推荐阅读
- r - 比较两个数据框并有条件地提取另一列的值
- tcl - 设置命令的使用
- django - 在 Django 中编辑动态选择字段
- javascript - Rails 6 - 在某些控制器操作中需要 JS 文件
- android - 你能帮我创建这个浮动操作按钮吗?
- python - 我正在尝试通过电子邮件将图像作为附件发送而不保存图像。我想直接发送变量
- python-3.x - .encode("utf-8") 似乎不支持我的表情符号?
- sql-server - 我想知道 SQL Server 上的分片方式
- python-3.x - 为什么将列表转换为字符串时会出错?
- c++ - WSAPoll 更改 FDSET 中的数据并由于 WSAENOTSOCK 而返回错误。我正确使用 WSAPoll() 吗?