【问题标题】:How does Django Channels Group/channel_session work?Django Channels Group/channel_session 是如何工作的?
【发布时间】:2016-10-22 13:00:57
【问题描述】:

似乎 Group 和 channel_session 可以跨多个消息会话和消费者持续存在。 Channels 是如何做到这一点的?

@channel_session_user_from_http
def ws_connect(message):
    # Add them to the right group
    message.channel_session['room'] = 'room name'
    Group("chat-%s" % message.user.username[0]).add(message.reply_channel)

@channel_session_user
def ws_disconnect(message):
    if 'room' in message.channel_session:
        print('room====', message.channel_session['room'])
    Group("chat-%s" % message.user.username[0]).discard(message.reply_channel)

我想设置一个长期存在的对象,就像每个消费者都可以访问的全局对象。

【问题讨论】:

    标签: django-channels


    【解决方案1】:

    您可以使用@channel_session(或@channel_session_user)装饰器来实现这一点。确保您的对象是可序列化的,然后将其添加到用户的频道会话中,如下所示:

    @channel_session_user_from_http
    def ws_connect(message):
        message.session.myobject = {'test': True}
    
    @channel_session_user
    def ws_connect(message):
        print(message.session.myobject)   # should output {'test': True}
    

    或者,只需使用您的 DB 或 redis 就可以像通常在 Django 中一样持久保存内容:

    @channel_session_user_from_http
    def ws_connect(message):
        redis_conn.set('my-persisted-key', "{'test': True}")
    
    @channel_session_user
    def ws_connect(message):
        print(redis_conn.get('my-persisted-key'))  # should output "{'test': True}"
    

    【讨论】:

    • 我知道它已经很久了,但是我如何才能从常规视图访问message.session.myobject = {'test': True}
    • 你不能@zerohedge,它们是单独的会话对象。您需要手动将 session_key 存储在某处并从SessionStore 获取会话。 docs.djangoproject.com/en/2.0/topics/http/sessions/…
    • 感谢您的帮助(我仍在尝试解决此问题)。当您说“在某处存储”时,我可以将它存储在一个短暂的地方,但 在连接期间可用?那么我可以在consumer 中设置会话密钥并从view 中检索吗?
    • 我的问题是一个更好的概括性问题:stackoverflow.com/q/51187309/5013234 谢谢!
    • 它们完全是单独的会话,您将无法从 ws 会话中设置内容并让它们出现在 http 会话中。要访问 http 会话,您需要将其 session_id 存储在数据库中的某个位置。
    猜你喜欢
    • 2020-08-03
    • 2022-12-05
    • 1970-01-01
    • 2011-11-18
    • 2023-03-28
    • 1970-01-01
    • 2014-07-20
    • 2020-05-26
    • 2019-06-11
    相关资源
    最近更新 更多