2016-06-21 22 views
4

似乎Group和channel_session可以在多個消息會話和消費者中持續存在。渠道如何實現這一目標?Django Channels Group/channel_session是如何工作的?

@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) 

我想設置一個很長的現有對象,就像每個消費者都可以訪問的全局對象一樣。

回答

0

您可以使用@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} 

或者,只需使用你的數據庫或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}"