txredisapi: фабрика немедленно останавливается - PullRequest
0 голосов
/ 02 апреля 2019

Я использую витой сервер, серверы которого: websocket (autobahn) + флеш-сервер.

Когда я пытаюсь реализовать этот пример для достижения асинхронной функциональности pub / sub redis,Я столкнулся со странным заводским поведением.

Код (в if __name__ == '__main__'):

log.startLogging(sys.stdout)
port = int(os.getenv('PORT', 5000))
ws_factory = Factory(u"ws://0.0.0.0:{}".format(port))
ws_factory.protocol = ClientProtocol
ws_factory.setProtocolOptions(autoPingInterval=2, autoPingTimeout=30)
ws_resource = WebSocketResource(ws_factory)
wsgi_resource = WSGIResource(reactor, reactor.getThreadPool(), app)

rootResource = WSGIRootResource(wsgi_resource,
                                {b'ws': ws_resource})

site = Site(rootResource)
reactor.listenTCP(port, site)
reactor.connectTCP("127.0.0.1", 6379, myFactory())
reactor.run()

Журнал (только для Redis Factory):

web | 2019-04-02 19:15:05+0000 [-] Starting factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:05+0000 [Uninitialized] <twisted.internet.tcp.Connector object at 0x7f437c1b65c0> will retry in 2 seconds
web | 2019-04-02 19:15:05+0000 [-] Stopping factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:08+0000 [-] Starting factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:08+0000 [Uninitialized] <twisted.internet.tcp.Connector object at 0x7f437c1b65c0> will retry in 8 seconds
web | 2019-04-02 19:15:08+0000 [-] Stopping factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:16+0000 [-] Starting factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:16+0000 [Uninitialized] <twisted.internet.tcp.Connector object at 0x7f437c1b65c0> will retry in 21 seconds
web | 2019-04-02 19:15:16+0000 [-] Stopping factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:38+0000 [-] Starting factory <__main__.myFactory object at 0x7f437c1b64a8>
web | 2019-04-02 19:15:38+0000 [Uninitialized] <twisted.internet.tcp.Connector object at 0x7f437c1b65c0> will retry in 67 seconds
web | 2019-04-02 19:15:38+0000 [-] Stopping factory <__main__.myFactory object at 0x7f437c1b64a8>

Протокол Redis:

import txredisapi as redis5


class myProtocol(redis.SubscriberProtocol):
    def connectionMade(self):
        print("waiting for messages...")

    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 myFactory(redis.SubscriberFactory):
    maxDelay = 120
    continueTrying = True
    protocol = myProtocol

Как видите, он не соединяется (не достигает даже метода connectionMade).Redis работает на порту 6379 в контейнере Docker и наверняка работает и готов к подключению.Сначала я думал, что весь сервер WSGI портится, но с использованием только: reactor.connectTCP("127.0.0.1", 6379, myFactory()) reactor.run() результат все тот же.Я пробовал несколько других методов для реализации txredisapi:

application = service.Application("subscriber")
    srv = internet.TCPClient("127.0.0.1", 6379, myFactory())
    srv.setServiceParent(application)

и

connecting = ClientCreator(reactor, myProtocol).connectTCP("127.0.0.1", 6379)
    def connected(listener):
        listener.subscribe("newChannelName")
    connecting.addCallback(connected)

, ни один из них не работал.

Я хотел бы использовать Redis pub / subфункция для отслеживания сообщений, отправленных через веб-сокет.

...