Django通道会话问题,Redis作为通道层后端

Django通道会话问题,Redis作为通道层后端,django,websocket,django-channels,Django,Websocket,Django Channels,我将Django通道与单独的Javascript前端结合使用。WebSocket工作正常。我现在想做的是: 当用户打开网站时,后端会生成一个特定的id。后端会将该id保存在带有消息的会话中。channel\u会话['my\u id'] 在随后通过websocket调用后端时,我希望从会话中检索该密钥 然而,有时这似乎是可行的,有时我会得到一个KeyError我的id似乎不存在。我的代码: routing.py: from channels.routing import route from

我将Django通道与单独的Javascript前端结合使用。WebSocket工作正常。我现在想做的是:

  • 当用户打开网站时,后端会生成一个特定的id。后端会将该id保存在带有
    消息的会话中。channel\u会话['my\u id']
  • 在随后通过websocket调用后端时,我希望从会话中检索该密钥
然而,有时这似乎是可行的,有时我会得到一个
KeyError
<代码>我的id似乎不存在。我的代码:

routing.py

from channels.routing import route
from chat.consumers import ws_connect, ws_receive

channel_routing = [
    route("websocket.connect", ws_connect),
    route("websocket.receive", ws_receive),
]
import uuid
from channels.sessions import channel_session


@channel_session
def ws_connect(message):
    message.channel_session['my_id'] = str(uuid.uuid4())

@channel_session
def ws_receive(message):
    my_id = message.channel_session['my_id']  # this one sometimes fails...
consumers.py

from channels.routing import route
from chat.consumers import ws_connect, ws_receive

channel_routing = [
    route("websocket.connect", ws_connect),
    route("websocket.receive", ws_receive),
]
import uuid
from channels.sessions import channel_session


@channel_session
def ws_connect(message):
    message.channel_session['my_id'] = str(uuid.uuid4())

@channel_session
def ws_receive(message):
    my_id = message.channel_session['my_id']  # this one sometimes fails...
但是,当我将通道层后端从Redis切换到内存中时,它工作正常(我使用
/manage.py runserver
,因此我不运行单独的工作程序)


有什么想法吗?是否存在竞争条件或其他问题?

您是否尝试过创建
websocket\u keepalive
消费者?您解决了这个问题吗?