在发布和订阅模型中限制订阅者的干净方法



在使用高速公路的发布和订阅模型中,我想限制给定@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来做到这一点,覆盖onClientSubscribedonClientUnsubscribed方法并使用内部数组变量......但我想知道是否有更清洁的方法...

  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)。

相关内容

  • 没有找到相关文章

最新更新