在使用高速公路的发布和订阅模型中,我想限制给定@exportSub(...)
的订阅者数量。你怎么知道订阅者的数量?
(来自示例)
class MyTopicService(object):
def __init__(self, allowedTopicIds):
self.allowedTopicIds = allowedTopicIds
@exportSub("", True)
def subscribe(self, topicUriPrefix, topicUriSuffix):
ret = False
print "client wants to subscribe to %s %s. Allowed topic ids:%s" % (topicUriPrefix, topicUriSuffix, self.allowedTopicIds)
try:
if topicUriSuffix in self.allowedTopicIds:
ret = True
print "Subscribing client to topic %s %s" % (topicUriPrefix, topicUriSuffix)
else:
print "Client not allowed to subscribe to topic %s %s" % (topicUriPrefix, topicUriSuffix)
except:
print "illegal topic - skipped subscription"
finally:
return ret
class MyServerProtocol(WampServerProtocol):
def onSessionOpen(self):
self.registerHandlerForPubSub(MyTopicService(my_keys_1), url_1_foo)
self.registerHandlerForPubSub(MyTopicService(my_keys_2), url_2_bar)
我可能可以使用我自己的WampServerFactory
来做到这一点,覆盖onClientSubscribed
和onClientUnsubscribed
方法并使用内部数组变量......但我想知道是否有更清洁的方法...
class MyFactory(WampServerFactory):
def onClientSubscribed(self, *a, **k):
WampServerFactory.onClientSubscribed(self, a, k)
print '=== client subscribed '
def onClientUnsubscribed(self, *a, **k):
WampServerFactory.onClientUnsubscribed(self, a, k)
print '=== client unsubscribed '
代码可以在这里找到。
不幸的是,目前没有公共的、受支持的 API。
我同意像myWampFactory.getSubscribers(someTopic)
这样的东西在某些情况下会很有用。如果您关心,请在 GitHub 上提交问题,以便我们跟踪功能请求。
在您提到的 2 个工作者中,覆盖onClientSubscribed
似乎会导致订阅的第二次嘘声,我发现这比访问内部更令人不满意(myFactory.subscriptions
)。