断线重连需用带计数器的while循环,检查连接状态、捕获异常(如ConnectionError)、失败则等待后重试,成功或达最大重试次数时退出。

用 while 循环实现断线重连,核心是持续尝试连接,直到成功或达到最大重试次数。关键在于:判断连接状态、加入合理等待、避免无限循环、处理异常。
检测连接是否失败并进入重连循环
每次连接操作后检查返回值或捕获异常(如网络库抛出的 ConnectionError、TimeoutError),一旦失败就继续循环;连接成功则用 break 退出。
- 不要只靠
while True:硬循环,必须有明确退出条件 - 推荐用带计数器的循环,比如
retry_count = 0; while retry_count - 连接逻辑放在
try块中,失败在except里递增计数器并continue
每次重连前加延迟,避免高频冲击服务端
立即重试可能加重网络负担或触发限流。应在每次失败后暂停一段时间,常见做法是固定延迟或指数退避。
- 简单场景:用
time.sleep(1)延迟 1 秒 - 进阶做法:延迟时间随重试次数增加,例如
sleep(2 ** retry_count)(最多几秒) - 注意:首次连接前不延迟,延迟只发生在重试时
设置最大重试次数和超时,防止卡死
没有上限的重连会阻塞程序甚至耗尽资源。必须限制总尝试次数,并为单次连接设置超时。
- 连接函数调用时传入
timeout=5(单位秒),避免一次卡住太久 - 定义
max_retries = 5,循环中超过该值就raise ConnectionError("重连失败") - 可在循环末尾打印日志,如
print(f"第 {retry_count + 1} 次重连..."),便于排查
示例代码(伪逻辑+Python风格)
(实际使用时替换为你的客户端,如 requests、socket、pymysql 等)
import time
<p>def connect_with_retry(max_retries=5, base_delay=1):
for i in range(max_retries):
try:</p><h1>替换为真实连接语句,如 requests.get(..., timeout=3)</h1><pre class="brush:php;toolbar:false;"> conn = your_client.connect(host="xxx", timeout=3)
print("连接成功")
return conn
except (ConnectionError, TimeoutError) as e:
print(f"连接失败(第{i+1}次):{e}")
if i <p></p>










