我正在使用棘轮来启用群聊的推送通知。
我决定做以下事情:
我有一个主题protected $subscribedTopics = array();
主题,如棘轮教程中所述。
这样可行,但随着时间的推移,群组主题/用户主题的数量只会增加(无法从订阅的主题数组中删除这些主题)。
按照设计,我的应用程序不允许从客户端向服务器发送消息,也不允许用户取消订阅。它只能关闭连接
所以,我需要一种方法来获取用户订阅的所有主题,当他关闭时(我的逻辑是,如果他是某些主题的唯一订阅者,则从订阅主题数组中删除这些主题)< / p>
onClose方法是:
public function onClose(ConnectionInterface $conn) {
echo "close";
}
我该怎么做?
答案 0 :(得分:1)
关闭连接后,您仍需要取消订阅主题,以便将其从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));
}
}
这只是一个扩展教程的应用示例,因此其他人也可以使用它。
如果您需要任何进一步的帮助,请告诉我