Невозможно получить результат pubnub.time () в Python - PullRequest
1 голос
/ 12 марта 2019

Как получить результат pubnub.time () при вызове? Это определенно связано с тем, что я не совсем хорошо знаю Python ...

Я пытаюсь вызвать pubnub.time (), чтобы проверить, когда сетевое соединение восстанавливается, чтобы pubnub мог восстановить соединение, и я могу повторно подписаться на нужный канал. Я не могу получить желаемый результат. Согласно документам pubnub , time () имеет 3 метода, которые будут возвращать int, string или date.

envelope = pubnub.time()

envelope.int()  outputs error
envelope.str()  outputs error
envelope.date_time()  outputs error

Единственное, что я могу заставить работать - это print(envelope), что дает <pubnub.endpoints.time.Time object at 0x75fb8f50>.

Я не буду вдаваться в подробности того, сколько раз я пытался это сделать, и буду просить о помощи.

UPDATE

У нас есть пара удаленных систем, которые мы хотим использовать PubNub для сбора точек данных с оборудования, подключенного к машине. Будут поступать запросы данных, и PubNub должен отвечать на запросы. Наша главная проблема заключается в том, что в этих удаленных расположениях очень ненадежный DSL, который отключается от нескольких часов до нескольких дней, и пока наше приложение python все еще работает, PubNub не подключается повторно. Попытка повторного соединения_политией с LINEAR и EXPONENTIAL не удается повторно подключиться после отключения интернета. Небольшие короткие перебои восстановятся. Помимо этого, PubNub отлично работает для этой установки.

Вот мой установочный конфиг

pnconfig = PNConfiguration()
pnconfig.subscribe_key = 'sub'
pnconfig.publish_key = 'pub'
pnconfig.reconnect_policy = 'PNReconnectionPolicy.EXPONENTIAL'
pnconfig.daemon = True
pnconfig.ssl = True

Вот наш обратный звонок для подписки:

class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass

    def status(self, pubnub, status):
        if status.is_error():
            logger.error("PN Error" + str(status.error_data.exception))

        if status.category == 
            PNStatusCategory.PNUnexpectedDisconnectCategory:
            logger.error("PN Unexpected Disconnect")
            pubnub.reconnect()
            pass

        elif status.category == PNStatusCategory.PNConnectedCategory:
            logger.info("PN Connected")

        elif status.category == PNStatusCategory.PNReconnectedCategory:
            logger.warning("PN Re-Connected")
            pubnub.subscribe().channels('devChannel').execute()
            pass

        elif status.category == PNStatusCategory.PNDecryptionErrorCategory:
            logger.error("PN Decryption Error")
            pass

1 Ответ

0 голосов
/ 14 марта 2019

Переподключение PubNub SDK при сетевой ошибке

PubNub SDK надежны и способны поддерживать сокетные соединения в нестабильных сетевых условиях. Хотя подключение может быть не всегда доступным, как только сетевое подключение возвращается, PubNub SDK должен автоматически воссоздать сокет и загрузить все пропущенные сообщения. PubNub Python SDK должен следовать этой философии.

В вашем примере кода кажется, что вы устанавливаете reconnect_policy. Однако ваш код устанавливает переменную политики переподключения в строку 'PNReconnectionPolicy.EXPONENTIAL', а не в enum PNReconnectionPolicy.EXPONENTIAL.

Попробуйте использовать следующую модификацию вашего кода для использования политики переподключения:

from pubnub.enums import PNReconnectionPolicy       ## <-- Import Enumerator
from pubnub.pnconfiguration import PNConfiguration

## ... init ...

## Set Reconnection Policy using Enumerator
pnconf.reconnect_policy = PNReconnectionPolicy.EXPONENTIAL

По умолчанию SDK pnconf.reconnect_policy = PNReconnectionPolicy.NONE. Другой допустимый параметр - pnconf.reconnect_policy = PNReconnectionPolicy.LINEAR.

Установите на PNReconnectionPolicy.LINEAR для автоматического переподключения. Используйте опцию PNReconnectionPolicy.NONE для отключения автоматического переподключения. Используйте опцию PNReconnectionPolicy.EXPONENTIAL, чтобы установить экспоненциальный интервал повторения.

Справочный материал: https://github.com/pubnub/python/search?q=PNReconnectionPolicy&unscoped_q=PNReconnectionPolicy

Документация материал: https://www.pubnub.com/docs/python/api-reference-configuration#configuration-args-1

...