我已经开发了django应用程序(我正在使用django rest框架),并且我正在尝试将websockets与来自django的channels&channels redis包集成。我跟随本教程和本视频教程,但我作出调整的基础上,前者在必要时。
我已经安装了
pip install channels
pip install channels-redis
但在我的windows操作系统上,redis似乎根本不适合我
在本地服务器上,我有以下配置:
设置.py
ASGI_APPLICATION = "mysite.asgi.application"
.
.
.
if config('CHANNEL_LAYERS') == 'redis':
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
},
},
}
else:
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels.layers.InMemoryChannelLayer",
},
}
asgi.py公司
import os
import django
from django.conf.urls import url
from django.core.asgi import get_asgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "trike.settings")
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
# Models
from logistics.consumers import OrderConsumer
django.setup()
application = ProtocolTypeRouter({
# Django's ASGI application to handle traditional HTTP requests
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter([
url(r"^order_update/$", OrderConsumer.as_asgi()),
])
),
})
订单.js
useEffect(() => {
let wsStart = 'ws://'
if (window.location.protocol === 'https:') {
wsStart = 'wss://'
}
let endpoint = wsStart + window.location.host
setSocket(new WebSocket(endpoint+'/order_update/'))
}, []);
useEffect(() => {
console.log(socket)
if (socket) {
socket.onmessage = function(e){
console.log('message', e)
const data = JSON.parse(e.data)
syncOrder({ data })
}
socket.onopen = function(e){
console.log('open', e)
}
socket.onerror = function(e){
console.log('error', e)
}
socket.onclose = function(e){
console.log('close', e)
}
}
}, [socket]);
所以在本地,我只能在MemoryChannelLayer中使用我的频道。也可能是因为有了windows操作系统。但是我试过安装这个,redis服务器可以运行,但是我认为它有一些兼容性问题。那是昨天,现在服务器将不会运行,错误为1069:登录失败。
在制作过程中,我仍然无法让它工作。我有一个基于ubuntu的服务器,我遵循的教程让redis在macos上工作,我认为它是基于linux的(语法相同)。我跟踪了channels和channels redis包的安装,并进行了上述配置,但仍然无法工作。我得到这个错误:
WebSocket handshake: Unexpected response code: 200
在教程中提到运行协议服务器时输入:
daphne -p 8001 myproject.asgi:application
但我有个错误:
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
现在我只能在ubuntu或本地windows操作系统上使用redis。找不到在线有效的解决方案,已在此处发布。
暂无答案!
目前还没有任何答案,快来回答吧!