Ratchet ,获取客户关于连接关闭的主题

Ratchet , get client's topics on connection close

我正在使用 ratchet 为群聊启用推送通知。

我决定执行以下操作:

我有一系列 protected $subscribedTopics = array(); 棘轮教程中提到的主题。

这可行,但随着时间的推移,组 topics/user 主题的数量只会增加(无法从订阅的主题数组中删除这些主题)。

根据设计,我的应用程序不允许从客户端向服务器发送消息,也不允许用户取消订阅。它只能关闭连接

所以,我需要一种方法来获取用户已订阅的所有主题,当他关闭时(我的逻辑是,如果他是某些主题的唯一订阅者,则从订阅的主题数组中删除这些主题)

onClose 方法是:

public function onClose(ConnectionInterface $conn) {
    echo "close";
}

我该怎么做?

您仍然需要在连接关闭后调用取消订阅主题以将其从 websocket 中完全删除。

public function onClose(ConnectionInterface $conn) {
    foreach ($conn->Chat->rooms as $topic => $one) {
        $this->onUnSubscribe($conn, $topic);
    }
}

使用此代码,您可以在连接关闭时取消订阅 $topic

要取消订阅,您需要这样的东西:

function onUnSubscribe(ConnectionInterface $conn, $topic) {
    unset($conn->rooms['topic']);
    $this->rooms[$topic]->detach($conn);
    if ($this->rooms[$topic]->count() == 0) {
        unset($this->rooms[$topic], $this->roomLookup[array_search($topic, $this->roomLookup)]);
        $this->broadcast(static::CTRL_ROOMS, array($topic, 0));
    } else {
        $this->broadcast($topic, array('leftRoom', $conn->WAMP->sessionId));
    }
}

这只是一个扩展教程的应用示例,以便其他人也可以使用它。

如果您需要任何进一步的帮助,请告诉我