2017-01-22 4 views
1

Verwendung von Websocket mit Django 1.10.5 mit Channels 1.0.2. Ich öffne eine Verbindung mit einem Benutzer-Token, und ich möchte die Öffnung, um jeden zu trennen, der die ID dieses Benutzers verwendet. Der Befehl, selbst wenn er ausgeführt wird, bevor die Verbindung akzeptiert wird, schließt jedoch den Benutzer selbst.Belassen Sie nur eine aktive Verbindung pro Benutzer

Hier ist, wie ich es tat:

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

Antwort

1

fand ich die Lösung:

Für Gruppen, in der es Verfahren „Senden“ ist der Parameter „sofort Falsch =“, es ebenso wahr verlassen, und dann wird die Funktion vor dem Hinzufügen des neuen Benutzers ausgeführt werden, Damit wird die neue Verbindung nicht getrennt.

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

sehen dies über die Annahme von Verbindungen: Websocket using Django Channels

Über pro Benutzer nur einzige Verbindung mit, werden Sie haben entweder neue Verbindungen auf der Grundlage Ihrer Logik ablehnen oder Senden Sie eine Close-Nachricht über ein Websocket.connect an den entsprechenden reply_channel (oder Kanäle), was es scheint, dass Sie hier versuchen.

Verwandte Themen