2017-01-22 62 views
1

使用帶有頻道1.0.2的Django 1.10.5的websocket。我打開了一個用戶令牌的連接,並且我希望打開該連接以斷開使用該用戶ID的每個人的連接。然而,該命令即使在接受連接之前運行,也最終會自己關閉用戶。每個用戶只保留一個活動連接

我是這樣做的:

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

我找到了解決辦法:

對於組,在「送」的方法有「立即= FALSE」參數,只要把它作爲真正的,然後該函數將添加新的用戶之前執行,所以它不會斷開新的連接。

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

關於只有唯一的每個用戶連接,你就必須要麼拒絕根據您的邏輯或新連接在websocket.connect上發送一條關閉消息給相關的reply_channel(或channels),這似乎是你在這裏要做的。