2016-06-21 25 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} 

また、ちょうどジャンゴに通常あなたのようなものを永続化するために、あなたのDBやRedisのを考え使用します

@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}" 
関連する問題