无法在 Python 中获得 pubnub.time() 的结果
Unable to get result of pubnub.time() in Python
如何在调用时获得 pubnub.time() 的结果?这肯定和我不完全了解python有关...
我正在尝试调用 pubnub.time() 来测试网络连接何时恢复,以便 pubnub 可以重新连接并且我可以重新订阅必要的频道。我似乎无法获得所需的输出。根据 pubnub docs,time() 有 3 个方法可以 return 一个整数、字符串或日期。
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>
。
我不会深入研究我在这方面尝试了多少次迭代,并寻求帮助。
更新
我们有几个远程系统,我们想使用 PubNub 从连接到机器的硬件收集数据点。数据请求会进来,PubNub 需要响应这些请求。我们的主要问题是这些偏远地区的 DSL 不稳定,一次会中断数小时到数天,而我们的 python 应用程序仍然 运行,而 PubNub 不会重新连接。使用 LINEAR 和 EXPONENTIAL 尝试 reconnect_policy 在互联网中断后都无法重新连接。不过,小而短的中断会恢复。除此之外,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
PubNub SDK 因网络错误重新连接
PubNub SDK 经久耐用,能够在不稳定的网络条件下保持套接字连接。虽然连接可能并不总是可用,但只要网络连接 returns,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
设置指数重试间隔。
参考material:https://github.com/pubnub/python/search?q=PNReconnectionPolicy&unscoped_q=PNReconnectionPolicy
文档 material:https://www.pubnub.com/docs/python/api-reference-configuration#configuration-args-1
如何在调用时获得 pubnub.time() 的结果?这肯定和我不完全了解python有关...
我正在尝试调用 pubnub.time() 来测试网络连接何时恢复,以便 pubnub 可以重新连接并且我可以重新订阅必要的频道。我似乎无法获得所需的输出。根据 pubnub docs,time() 有 3 个方法可以 return 一个整数、字符串或日期。
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>
。
我不会深入研究我在这方面尝试了多少次迭代,并寻求帮助。
更新
我们有几个远程系统,我们想使用 PubNub 从连接到机器的硬件收集数据点。数据请求会进来,PubNub 需要响应这些请求。我们的主要问题是这些偏远地区的 DSL 不稳定,一次会中断数小时到数天,而我们的 python 应用程序仍然 运行,而 PubNub 不会重新连接。使用 LINEAR 和 EXPONENTIAL 尝试 reconnect_policy 在互联网中断后都无法重新连接。不过,小而短的中断会恢复。除此之外,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
PubNub SDK 因网络错误重新连接
PubNub SDK 经久耐用,能够在不稳定的网络条件下保持套接字连接。虽然连接可能并不总是可用,但只要网络连接 returns,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
设置指数重试间隔。
参考material:https://github.com/pubnub/python/search?q=PNReconnectionPolicy&unscoped_q=PNReconnectionPolicy
文档 material:https://www.pubnub.com/docs/python/api-reference-configuration#configuration-args-1