问题详情
您好,您是否尝试使用channels 库?它将为您提供与Django-channels 相同的强大功能。 Here你可以找到它的必要文档。
我推荐你使用它,因为它比Django-channels 更灵活。
频道库
快速入门
您可以在Tutorial 阅读如何使用它。
错误及解决办法
意外响应代码:200(或其他代码XXX)(已解决):
- 确保通过
settings (mysite.settings) 包含您的应用程序和频道,并使用asgi 应用程序:
INSTALLED_APPS = [
'channels',
'chat',
...
]
...
ASGI_APPLICATION = "mysite.asgi.application"
- 确保使用通道层 (
mysite.settings)。
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer',
},
}
根据Documentation,您应该使用数据库进行生产,但对于本地环境,您可以使用channels.layers.InMemoryChannelLayer。
- 确保您运行
asgi 服务器(不是 wsgi),因为您需要异步行为。此外,对于部署,您应该使用daphne 而不是gunicorn。 daphne 默认包含在 channels 库中,因此您无需手动安装。
基本运行服务器将如下所示(终端):
daphne -b 0.0.0.0 -p $PORT mysite.asgi:application
其中$PORT 是特定端口(对于 UNIX 系统是 5000)。 (heroku 应用使用的格式,你可以手动更改)。
连接建立错误:net::ERR_SSL_PROTOCOL_ERROR 和使用 https 连接的相同错误(已解决):
Difference between ws and wss?
您可能会考虑通过 wss 协议使用您的服务器:
将ws://... 替换为wss://... 或在您的html (chat/templates/chat/room.html) 中使用以下模板:
(window.location.protocol === 'https:' ? 'wss' : 'ws') + '://'
希望这个答案对channels 和Django 有用。