使用txredisapi建立连接后订阅和取消订阅频道

2024-04-28 02:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python、Twisted、Redis和txredisapi。在

建立连接后,如何获取订阅和取消订阅频道的SubscriberProtocol?在

我想我需要获取SubscriberProtocol的实例,然后我可以使用“subscribe”和“unsubscribe”方法,但不知道如何获取它。在

代码示例:

import txredisapi as redis

class RedisListenerProtocol(redis.SubscriberProtocol):
    def connectionMade(self):
        self.subscribe("channelName")
    def messageReceived(self, pattern, channel, message):
        print "pattern=%s, channel=%s message=%s" %(pattern, channel, message)
    def connectionLost(self, reason):
        print "lost connection:", reason

class RedisListenerFactory(redis.SubscriberFactory):
    maxDelay = 120
    continueTrying = True
    protocol = RedisListenerProtocol

然后从这些课程之外:

^{pr2}$

有什么建议吗?在

谢谢!在


下一个代码解决了问题:

@defer.inlineCallbacks
def subUnsub():
    deferred = yield ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)
    deferred.subscribe("newChannelName")
    deferred.unsubscribe("channelName")

说明: 使用“ClientCreator”在带有标志的函数中获取SubscriberProtocol的实例@defer.inlineCallbacks不要忘记“yield”关键字等待完成延迟的数据。然后你可以使用这个延迟订阅和取消订阅。在

在我的例子中,我忘记了yield关键字,因此deferred并不完整,suscribe和unsubscribe方法也不起作用。在


Tags: 实例方法selfredismessagedefchannelsubscribe
1条回答
网友
1楼 · 发布于 2024-04-28 02:27:45
connecting = ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)
def connected(listener):
    listener.subscribe("newChannelName")
    listener.unsubscribe("channelName")
connecting.addCallback(connected)

相关问题 更多 >