android - Ubuntu Azure 托管计算机上的 Pubnub+Python SDK。连接问题

标签 android python-3.x azure ubuntu-14.04 pubnub

我在以下情况下遇到了 Pubnub 的不良行为:

  1. 作为订阅者使用适用于 Python 的 Pubnub SDK
  2. Ubuntu 14.04 上的 Python 3+Django
  3. 托管在 Azure 上的 Ubuntu 计算机
  4. 作为发布者的 Android Pubnub 客户端

似乎在某个时刻,服务器端的Pubnub连接变得陈旧,也就是说,订阅者不会收到客户端发送的任何消息。 我注意到日志上有一些与 pubnub 连接相关的错误:

WARNING 2015-09-30 17:21:24,778 connectionpool 26551 139638563919616 Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'ReadTimeoutError("HTTPConnectionPool(host='pubsub.pubnub.com', port=80): Read timed out. (read timeout=320)",)': /subscribe/.../.../0/...?uuid=...&auth=...&pnsdk=PubNub-Python/3.7.3

大约5分钟后,消息被接收并正确处理。 我猜问题的根源在于 Azure 管理长 http 连接的方式,如下所示:

  1. 在我的本地计算机上不会出现此问题,该计算机具有完全相同的操作系统版本和相同的堆栈
  2. Python SDK 中有一个不起眼的“azure”参数。我尝试激活它,没有任何明显的差异
  3. 作为测试,我在我的电脑上添加了两个订阅者,他们都立即收到消息

谢谢。

最佳答案

根本原因似乎是 Azure 在 4 分钟以上切断 HTTP 连接 ( https://azure.microsoft.com/it-it/blog/new-configurable-idle-timeout-for-azure-load-balancer/ )。

另一方面,Pubnub 创建的连接有 5 分钟超时(320 秒,请参阅 https://github.com/pubnub/python/blob/master/pubnub.py#L1881)。

不幸的是,Pubnub 320 秒超时无法更改,而 Azure 超时似乎只能通过 Powershell 脚本进行修改(这很不舒服,特别是如果您没有 Microsoft Window 计算机)。

总而言之,我更改了 Pubnub 源代码并设置了 120 秒超时,现在一切进展顺利。

建议:

  1. 在 Pubnub 端记录该内容
  2. 修改 Pubnub,以便更改 320 秒超时
  3. 改进 Azure 界面,以便在不使用 Powershell 的情况下更改超时参数

关于android - Ubuntu Azure 托管计算机上的 Pubnub+Python SDK。连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32872445/

相关文章:

python - 如何在numpy中获取指定数组的欧几里得距离?

Android Studio 找不到 Node :6. 7.0。麦克迷你 M1

android - 回收者 View 为黑色

安卓。棒糖。 RecyclerView 不滚动

python - 我该怎么做 variable.endswith ("a"或 "b"或 "c"....) : doAThing in Python?

json - 如何使用 Azure CLI 命令为 Azure Datafactory 创建 SQL 链接服务?

安卓工作室 : Are language xml files compiled into the apk?

python-3.x - 如何修复 ‘AttributeError: cffi library ' _constant_time' 在 django 中没有名为 '__spec__' 的函数、常量或全局变量的错误”

azure - Cosmos DB 表请求在并行化时停止

azure - SQL表保存在哪里