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

2 回答 2

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.
        """
于 2017-02-02T23:53:10.643 回答
0

看到这个关于接受连接:Websocket using Django Channels

关于每个用户只有一个连接,您必须根据您的逻辑拒绝新连接,或者在 websocket.connect 上发送关闭消息到相关的回复通道(或通道),这似乎是您想要的在这里做。

于 2017-01-25T09:20:12.827 回答