每个用户只保留一个活动连接
Leave only one active connection per user
在 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})
查看有关接受连接的信息:
关于每个用户只有一个连接,您必须根据您的逻辑拒绝新连接,或者在 websocket.connect 时向相关 reply_channel(或频道)发送关闭消息,这似乎就是您要在此处执行的操作。
我找到了解决方案:
对于群组,在"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.
"""
在 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})
查看有关接受连接的信息:
关于每个用户只有一个连接,您必须根据您的逻辑拒绝新连接,或者在 websocket.connect 时向相关 reply_channel(或频道)发送关闭消息,这似乎就是您要在此处执行的操作。
我找到了解决方案:
对于群组,在"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.
"""