Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
镜像
Eclipse Foundation
paho.mqtt.python
提交
231b7fd5
P
paho.mqtt.python
项目概览
镜像
/
Eclipse Foundation
/
paho.mqtt.python
大约 1 年 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
paho.mqtt.python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
231b7fd5
编写于
5月 18, 2017
作者:
P
Pierre Fersing
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add exponential reconnection delay
上级
cbf1da91
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
60 addition
and
2 deletion
+60
-2
ChangeLog.txt
ChangeLog.txt
+1
-0
README.rst
README.rst
+17
-0
src/paho/mqtt/client.py
src/paho/mqtt/client.py
+42
-2
未找到文件。
ChangeLog.txt
浏览文件 @
231b7fd5
...
...
@@ -14,6 +14,7 @@ v1.3.x - 2017-xx-xx
- Allow arbitrary Websocket headers and path.
Closes #169.
- Fix issue with large inbound payload over Websocket. Closes #107.
- Add exponential delay for reconnection. Closes #195.
- Move unit tests to pytest (#164) and tox (#187)
- Add support for standard Python logging. Closes #95.
...
...
README.rst
浏览文件 @
231b7fd5
...
...
@@ -383,6 +383,23 @@ retain
Raises a ``ValueError`` if ``qos`` is not 0, 1 or 2, or if ``topic`` is
``None`` or has zero string length.
reconnect_delay_set
'''''''''''''''''''
::
reconnect_delay_set(min_delay=1, max_delay=120)
The client will automatically retry connection. Between each attempt
it will wait a number of seconds between ``min_delay`` and ``max_delay``.
When the connection is lost, initially the reconnection attempt is delayed of
``min_delay`` seconds. It's doubled between subsequent attempt up to ``max_delay``.
The delay is reset to ``min_delay`` when the connection complete (e.g. the CONNACK is
received, not just the TCP connection is established).
Connect / reconnect / disconnect
````````````````````````````````
...
...
src/paho/mqtt/client.py
浏览文件 @
231b7fd5
...
...
@@ -516,6 +516,9 @@ class Client(object):
self
.
_current_out_packet
=
None
self
.
_last_msg_in
=
time_func
()
self
.
_last_msg_out
=
time_func
()
self
.
_reconnect_min_delay
=
1
self
.
_reconnect_max_delay
=
120
self
.
_reconnect_delay
=
None
self
.
_ping_t
=
0
self
.
_last_mid
=
0
self
.
_state
=
mqtt_cs_new
...
...
@@ -541,6 +544,7 @@ class Client(object):
self
.
_msgtime_mutex
=
threading
.
Lock
()
self
.
_out_message_mutex
=
threading
.
RLock
()
self
.
_in_message_mutex
=
threading
.
Lock
()
self
.
_reconnect_delay_mutex
=
threading
.
Lock
()
self
.
_thread
=
None
self
.
_thread_terminate
=
False
self
.
_ssl
=
False
...
...
@@ -814,6 +818,19 @@ class Client(object):
self
.
_state
=
mqtt_cs_connect_async
def
reconnect_delay_set
(
self
,
min_delay
=
1
,
max_delay
=
120
):
""" Configure the exponential reconnect delay
When connection is lost, wait initially min_delay seconds and
double this time every attempt. The wait is capped at max_delay.
Once the client is fully connected (e.g. not only TCP socket, but
received a success CONNACK), the wait timer is reset to min_delay.
"""
with
self
.
_reconnect_delay_mutex
:
self
.
_reconnect_min_delay
=
min_delay
self
.
_reconnect_max_delay
=
min_delay
self
.
_reconnect_delay
=
None
def
reconnect
(
self
):
"""Reconnect the client after a disconnect. Can only be called after
connect()/connect_async()."""
...
...
@@ -1433,7 +1450,7 @@ class Client(object):
if
not
retry_first_connection
:
raise
self
.
_easy_log
(
MQTT_LOG_DEBUG
,
"Connection failed, retrying"
)
time
.
sleep
(
1
)
self
.
_reconnect_wait
(
)
else
:
break
...
...
@@ -1460,7 +1477,7 @@ class Client(object):
if
should_exit
():
run
=
False
else
:
time
.
sleep
(
1
)
self
.
_reconnect_wait
(
)
if
should_exit
():
run
=
False
...
...
@@ -2310,6 +2327,7 @@ class Client(object):
if
result
==
0
:
self
.
_state
=
mqtt_cs_connected
self
.
_reconnect_delay
=
None
self
.
_easy_log
(
MQTT_LOG_DEBUG
,
"Received CONNACK (%s, %s)"
,
flags
,
result
)
...
...
@@ -2585,6 +2603,28 @@ class Client(object):
def
_thread_main
(
self
):
self
.
loop_forever
(
retry_first_connection
=
True
)
def
_reconnect_wait
(
self
):
# See reconnect_delay_set for details
now
=
time_func
()
with
self
.
_reconnect_delay_mutex
:
if
self
.
_reconnect_delay
is
None
:
self
.
_reconnect_delay
=
self
.
_reconnect_min_delay
else
:
self
.
_reconnect_delay
=
min
(
self
.
_reconnect_delay
*
2
,
self
.
_reconnect_max_delay
,
)
target_time
=
now
+
self
.
_reconnect_delay
remaining
=
target_time
-
now
while
(
self
.
_state
!=
mqtt_cs_disconnecting
and
not
self
.
_thread_terminate
and
remaining
>
0
):
time
.
sleep
(
min
(
remaining
,
1
))
remaining
=
target_time
-
time_func
()
# Compatibility class for easy porting from mosquitto.py.
class
Mosquitto
(
Client
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录