muduo 超时重连
时间:2022-07-26
本文章向大家介绍muduo 超时重连,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
TcpClient 在两种情况下会自动重连。
1. Connector::connect 返回的 error 中需要重连;
2. TcpClient::removeConnection 中判断需要重连;
最终都会调用 Connector::retry
void Connector::retry(int sockfd)
{
sockets::close(sockfd); //关闭现有的fd
setState(kDisconnected);//设置为未连接
if (connect_)
{
LOG_INFO << "Connector::retry - Retry connecting to " << serverAddr_.toIpPort()
<< " in " << retryDelayMs_ << " milliseconds. ";
loop_->runAfter(retryDelayMs_/1000.0,
boost::bind(&Connector::startInLoop, shared_from_this()));//设置定时器
retryDelayMs_ = std::min(retryDelayMs_ * 2, kMaxRetryDelayMs);//重置重连时间
}
else
{
LOG_DEBUG << "do not connect";
}
}
EventLoop::runAfter() 向 EventLoop 中有一个 timerQueue 添加一个 timer 对象,并更新 loop 中的 timefd 的事件注册,使用 timefd_settime() 当时间到了,就会触发 timefd 可读,然后在处理可读事件的函数里读取数据并重连 => 就执行多一次 Connector::startInLoop() ,然后间隔一段时间以后,执行还是连接不上的话,还是再调用一次,这样的话,又能循环连接,又能不阻塞。
- 基于OpenDaylight和OVSDB搭建VxLAN网络
- 史上最强----机器学习经典总结---入门必读
- SDNLAB群分享(四):利用ODL下发流表创建VxLAN网络
- Neutron集成ONOS源码分析
- “访问限制”&“代理访问”实验
- OpenDaylight Lithium-SR2 Cluster集群搭建
- Linux | CentOS7下会玩JDK不?你确定?
- Linux | 不懂Linux的码神,不是真正的菜鸟
- 初体验Spring Boot 2支持的HikariCP连接池
- 快来了解JDK10中引入的全新JIT编译器:Graal
- 基于Ryu打造自定义控制器
- Junit 5新特性全集
- 深入了解浏览器的重绘与重排
- 自己动手写区块链(Java版)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- String - 383. Ransom Note
- String - 58. Length of Last Word
- String - 14. Longest Common Prefix
- String - 28. Implement strStr()
- Subsequence - 187. Repeated DNA Sequences
- Subsequence - 392. Is Subsequence
- parentheses - 241. Different Ways to Add Parentheses
- parentheses - 32. Longest Valid Parentheses
- parentheses - 22. Generate Parentheses
- palindrome - 132. Palindrome Partitioning II
- palindrome - 131. Palindrome Partitioning
- Parentheses - 20. Valid Parentheses
- Palindrome - 9. Palindrome Number
- Palindrome - 5. Longest Palindromic Substring
- Palindrome - 125. Valid Palindrome