使用带有Django 1.10.5的websocket和Channels 1.0.2。我正在打开与用户令牌的连接,我希望这个开头可以断开所有使用该用户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})
答案 0 :(得分:1)
我找到了解决方案:
对于组,在“send”方法中有“immediate = False”参数,只需将其保留为true,然后在添加新用户之前执行该函数,因此不会断开新连接。 / p>
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.
"""
答案 1 :(得分:0)
请参阅有关接受连接的信息:Websocket using Django Channels
关于每个用户只有连接,您必须根据您的逻辑拒绝新连接,或者在websocket.connect上发送关闭消息到相关的reply_channel(或多个频道),这似乎是你想在这里做什么。