Remove Topic autoDelete option from WAMP

When a Topic reaches 0 subscribers it will be removed
New subscriptions to Topics that had the same name will create new Topics
refs #185, #198
This commit is contained in:
Chris Boden 2017-09-14 07:40:37 -04:00
parent fe4a97400d
commit 0f827b13c9
4 changed files with 7 additions and 16 deletions

View File

@ -19,6 +19,7 @@ CHANGELOG
* BC: The Session component implements HttpServerInterface instead of WsServerInterface * BC: The Session component implements HttpServerInterface instead of WsServerInterface
* BC: PHP 5.3 no longer supported * BC: PHP 5.3 no longer supported
* BC: Update to newer version of react/socket dependency * BC: Update to newer version of react/socket dependency
* BC: WAMP topics reduced to 0 subscriptions are deleted, new subs to same name will result in new Topic instance
* Significant performance enhancements * Significant performance enhancements
* 0.3.6 (2017-01-06) * 0.3.6 (2017-01-06)

View File

@ -6,13 +6,6 @@ use Ratchet\ConnectionInterface;
* A topic/channel containing connections that have subscribed to it * A topic/channel containing connections that have subscribed to it
*/ */
class Topic implements \IteratorAggregate, \Countable { class Topic implements \IteratorAggregate, \Countable {
/**
* If true the TopicManager will destroy this object if it's ever empty of connections
* @deprecated in v0.4
* @type bool
*/
public $autoDelete = false;
private $id; private $id;
private $subscribers; private $subscribers;

View File

@ -118,7 +118,7 @@ class TopicManager implements WsServerInterface, WampServerInterface {
$this->topicLookup[$topic->getId()]->remove($conn); $this->topicLookup[$topic->getId()]->remove($conn);
if ($topic->autoDelete && 0 === $topic->count()) { if (0 === $topic->count()) {
unset($this->topicLookup[$topic->getId()]); unset($this->topicLookup[$topic->getId()]);
} }
} }

View File

@ -185,21 +185,18 @@ class TopicManagerTest extends \PHPUnit_Framework_TestCase {
} }
public static function topicConnExpectationProvider() { public static function topicConnExpectationProvider() {
return array( return [
array(true, 'onClose', 0) [ 'onClose', 0]
, array(true, 'onUnsubscribe', 0) , ['onUnsubscribe', 0]
, array(false, 'onClose', 1) ];
, array(false, 'onUnsubscribe', 1)
);
} }
/** /**
* @dataProvider topicConnExpectationProvider * @dataProvider topicConnExpectationProvider
*/ */
public function testTopicRetentionFromLeavingConnections($autoDelete, $methodCall, $expectation) { public function testTopicRetentionFromLeavingConnections($methodCall, $expectation) {
$topicName = 'checkTopic'; $topicName = 'checkTopic';
list($topic, $attribute) = $this->topicProvider($topicName); list($topic, $attribute) = $this->topicProvider($topicName);
$topic->autoDelete = $autoDelete;
$this->mngr->onSubscribe($this->conn, $topicName); $this->mngr->onSubscribe($this->conn, $topicName);
call_user_func_array(array($this->mngr, $methodCall), array($this->conn, $topicName)); call_user_func_array(array($this->mngr, $methodCall), array($this->conn, $topicName));