每个用户只保留一个活动连接
Posted
技术标签:
【中文标题】每个用户只保留一个活动连接【英文标题】:Leave only one active connection per user 【发布时间】:2017-01-22 17:05:40 【问题描述】:在 Django 1.10.5 和 Channels 1.0.2 中使用 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】:我找到了解决办法:
对于群组,“send”方法中有“immediately = False”参数,保持为true,然后函数会在添加新用户之前执行,所以不会断开新连接。
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.
"""
【讨论】:
【参考方案2】:请参阅有关接受连接的信息:Websocket using Django Channels
关于每个用户只有一个连接,您必须根据您的逻辑拒绝新连接或在 websocket.connect 上发送关闭消息到相关的回复通道(或通道),这似乎是您的正在这里尝试。
【讨论】:
以上是关于每个用户只保留一个活动连接的主要内容,如果未能解决你的问题,请参考以下文章