2017-01-22 18 views
1

Django 1.10.5とwebsocketをチャネル1.0.2で使用しています。私はユーザートークンとの接続を開始しています。そのユーザーIDを使用しているすべてのユーザーを切断するようにします。ただし、接続を受け入れる前に実行していても、コマンドはユーザー自身を閉じます。ここでユーザごとにアクティブな接続を1つだけ残してください。

が、私はそれをやった方法は次のとおりです。

def get_group(user): 
    if isinstance(user, User): 
     uuid = str(user.uuid) 
     return Group('user-%s' % uuid) 

@channel_session 
def websocket_connect(message): 
    user = CachedOAuth2Authentication().authenticate(socket_messeger=message) 
    if user: 
     # Do not use more than one device. 
     get_group(user).send({"close": True}) 

     message.channel_session['user'] = user 

     get_group(user).add(message.reply_channel) 
     message.reply_channel.send({"accept": True}) 
    else: 
     message.reply_channel.send({"close": True}) 

答えて

1

私は解決策を見つけた:グループの場合

、「送る」方法では、パラメータ「すぐに偽の=」同じように真のままにして、関数が新しいユーザーを追加する前に実行されますが、そこにあります新しい接続を切断することはありません。

def send(self, content, immediately=False): 
     """ 
     Send a message to all channels in the group. 

     Sends are delayed until consumer completion. To override this, you 
     may pass immediately=True. 
     """ 
0

は、接続を受け入れについては、これを参照してください。Websocket using Django Channels

ユーザーごとにのみ接続のみを持っていることについて、あなたはあなたのロジックに基づいて新しい接続を拒否するかがありますか関連するreply_channel(またはチャネル)にwebsocket.connectでクローズメッセージを送信します。これは、ここでやろうとしているようです。

関連する問題