boost::asio::deadline_timer异步handler频繁进入的问题

Boost.Asio异步网络编程调试与测试实战指南 异步编程是现代高性能网络应用的核心技术,它通过事件驱动和非阻塞I/O模型,在单线程或多线程中高效处理海量并发连接。其原理基于事件循环和回调机制,将I/O等待时间释放出来,从而大幅提升系统吞吐量。这项技术的核心价值在于能够构建高并发、低延迟的服务器和分布式系统。在C++生态中,Boost.Asio库是实现异步网络编程的工业级标准框架,广泛应用于游戏服务器、金融交易系统和物联网网关等场景。然而,异步编程的复杂性也带来了独特的调试挑战,例如事件循环的不可预测性、回调执行顺序的随机性以及资源生命周期的精细管理。针对 阅读详情

使用了boost库完成了流媒体服务器,在使用过程中反馈如下问题:

前端摄像机掉线,流媒体服务器执行摄像机掉线处理后,等待播放器重连;如果多个播放器同时执行重连时,会不定时出现boost::asio::deadline_timer失效,导致handler会频繁的进入,然后日志文件快速增长,占用大量的磁盘空间,查看日志文件可看到每秒400条以上的handler执行记录。

通过不断测试发现,多个播放器重连时,会偶然导致以下代码段执行多次

 

m_timer.expires_from_now(boost::posix_time::seconds(10));
		m_timer.async_wait(boost::bind(&CRTSPClient::SendRTCPCmd, this,boost::asio::placeholders::error));

m_timer在未超时时,如果再次执行,会导致m_timer失效,handler会频繁的进入。

经过查找代码发现,定时器处理函数里面忽略了错误码的判断,不管正常与否,都再次重新设置了定时器,以定时发送RTCP数据包。

错误代码如下:

void SendRTCP(const boost::system::error_code& ec)
{
	
	if (!ec)
	{
		
        ...
        SendRequest(tmp);
        ...
		
	}

	
    m_timer.expires_from_now(boost::posix_time::seconds(40));
		m_timer.async_wait(boost::bind(&CRTSPClient::SendRTCP,this,boost::asio::placeholders::error));
	
}

修改后,将定时重新设置代码放入到判断错误的代码段里面

void SendRTCP(const boost::system::error_code& ec)
{
	
	if (!ec)
	{
		
        ...
        SendRequest(tmp);
        ...
		
  m_timer.expires_from_now(boost::posix_time::seconds(40));
		m_timer.async_wait(boost::bind(&CRTSPClient::SendRTCP,this,boost::asio::placeholders::error));
	}

	
  
	
}

一定要注意错误的处理

一定要注意错误的处理

一定要注意错误的处理

C++网络编程实战:Boost.Asio异步模型与套接字编程详解 网络编程是构建分布式系统和网络应用的核心技术,其核心在于高效处理多并发连接与I/O操作。传统阻塞式套接字编程在应对C10K等高并发场景时面临性能瓶颈,因此异步I/O与事件驱动模型成为现代高性能网络框架的基石。Boost.Asio作为C++领域广泛使用的跨平台网络库,通过封装epoll、IOCP等系统级异步机制,提供了统一的Proactor模式接口,实现了真正的非阻塞I/O。其技术价值在于允许单线程或线程池高效管理海量连接,极大提升了程序的吞吐量与资源利用率,广泛应用于游戏服务器、金融交易系统、实时通信等高性 阅读详情

相关推荐

C++高性能跨平台网络编程实战:从IO模型到Boost.Asio应用

网络编程是构建分布式系统的基石,其核心在于高效管理海量并发连接与数据传输。从原理层面看,IO模型决定了程序处理网络请求的基本方式,其中IO多路复用技术通过单线程监控多个连接,显著提升了资源利用率。在技术价值上,高性能网络框架能够支撑游戏服务器、金融交易等低延迟、高吞吐场景。应用层协议设计(如长度前缀格式)与缓冲区优化(如零拷贝技术)是保障通信效率的关键实践。本文聚焦于C++领域,探讨如何利用Boost.Asio等现代库实现跨平台高性能网络服务,涵盖Reactor/Proactor模式选型、连接生命周期管理及

axfcjwkbi259888707的博客 403

asio boost 异步错误处理_boost::ASIO的同步方式和异步方式

http://blog.youkuaiyun.com/zhuky/article/details/5364574http://blog.youkuaiyun.com/zhuky/article/details/5364685Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。头文件#include 名空间using namespace boost::asio;AS...

weixin_42519985的博客 546

C++ Asio网络编程错误处理全解析:从基础机制到高级实践

在C++高性能网络编程中,错误处理是构建健壮系统的基石。其核心机制通常围绕错误码和异常两种模式展开,错误码提供同步与异步场景下的通用、无抛出的错误传递方式,而异常则适用于简化复杂同步逻辑的错误处理流程。从技术价值看,合理的错误处理策略能显著提升程序的容错性、可维护性和可观测性,是保障服务稳定运行的关键。在异步事件驱动的网络应用中,错误处理尤其重要,它需要与连接生命周期管理、超时控制、资源管理等核心机制紧密结合。本文聚焦于Asio库,深入探讨其错误码与异常的双重机制、异步回调中的错误传递模式,并结合连接管理、

weixin_33720078的博客 316

boost::asio::deadline_timer

注意deadline_timer和socket一样,都用 io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。 一个deadline_timer只维护一个超时时间,一个deadline_timer不同时维持多个定

飞翔的大象 9584

C++ Asio高性能网络编程实战:从架构设计到性能优化

异步I/O是现代高性能网络编程的核心技术,它通过事件驱动模型将I/O等待与业务处理解耦,从而在单线程内高效管理大量并发连接。其原理基于操作系统的I/O多路复用机制(如epoll、kqueue),允许应用在数据就绪时被通知,而非主动轮询,这大幅减少了线程上下文切换和系统调用开销。这一技术价值在于能够以极少的资源支撑海量连接,是实现高并发、低延迟服务的基石,广泛应用于游戏服务器、金融交易系统、物联网网关等场景。本文聚焦于C++ Asio库,深入探讨如何通过多线程io_context负载均衡、内存池优化、时间轮定

weixin_34248487的博客 370

C++ WebSocket生产级开发:8个致命错误与高并发架构实践

在实时通信与网络编程领域,WebSocket协议是实现全双工、低延迟数据交换的核心技术。其工作原理基于HTTP升级握手,建立持久连接后通过数据帧进行双向通信,有效解决了传统HTTP轮询带来的延迟与资源消耗问题。这一技术价值在于为在线游戏、金融行情推送、物联网控制台等场景提供了高效的实时数据通道。然而,在生产环境中,开发者常因忽视连接生命周期管理、错误处理机制不完善等关键细节,导致服务出现连接闪断、内存泄漏等严重问题。本文聚焦C++后端开发,结合Boost.Asio/Beast等库的工程实践,深入剖析高并发场

weixin_34110749的博客 393

boost::deadline_timer

boost::deadline_timer 定义 typedef basic_deadline_timer deadline_timer; basic_deadline_timer是个模板类。 构造函数 deadline_timer有三个构造函数: 1 explicit basic_deadline_timer(boost::asio::io_service& io_servi

yanziguilai的专栏 4974

C++高性能金融系统开发:从架构设计到微秒级优化实战

在追求极致性能的金融科技领域,系统延迟直接关系到交易成败。C++凭借其零成本抽象和底层硬件控制能力,成为构建高频交易、做市商系统等核心基础设施的首选语言。其技术价值在于能够实现微秒甚至纳秒级的响应,通过精细的内存管理和并发控制确保系统稳定。本文聚焦于如何运用C++构建高性能金融系统的核心模块,例如通过无锁环形缓冲区和对象池技术优化市场数据接收与订单处理流程,有效应对海量实时数据处理的挑战。这些实践不仅适用于金融交易场景,也为其他对延迟敏感的实时系统提供了可借鉴的工程方案。

weixin_34111790的博客 420

asio中的定时器steady_timer和deadline_timer

asio中的定时器

Erice_s的博客 1353

C++ Networking TS 实现解析:从执行器、协程到高性能网络编程实践

在现代C++网络编程中,异步编程模型是构建高并发、低延迟服务的核心技术。其核心原理在于将I/O操作与任务执行解耦,通过事件驱动机制提升系统吞吐量。这一技术的核心价值在于能够以极少的线程资源处理海量并发连接,显著提升资源利用率。其典型应用场景包括游戏服务器、金融交易系统、实时通信平台等对性能要求苛刻的领域。本文聚焦于C++ Networking TS(网络技术规范)的具体实现,深入剖析其核心组件——执行器(Executor)与完成令牌(Completion Token)。执行器作为异步操作的调度核心,决定了任

掬水月在手,弄花香满衣 441

告别双系统!用Ventoy把Ubuntu 22.04装进U盘,打造你的随身开发环境(附保姆级避坑指南)

本文详细介绍了如何使用Ventoy将Ubuntu 22.04安装到U盘,打造便携式开发环境。通过即插即用的特性,开发者可以在任何x86电脑上快速启动完整的Ubuntu系统,无需配置双系统或虚拟机。文章提供了从硬件准备到系统优化的全流程指南,帮助用户高效创建随身开发环境。

weixin_31569671的博客 364

用boost的asio+deadline_timer实现一个循环定时器

废话不多说, asio的原理请百度其它博文, 百度上好多deadline_timer的例子都是单次定时, 或者是封装的很长. 本文写的是一个超简单的例子来实现循环定时, 注意这个循环的周期是可变的, 可以每5秒固定周期执行, 也可以1秒/5秒/2秒变周期执行, 或者指定一个绝对时间来执行.   #include "stdafx.h" #include <boost/asio.hpp&g...

bigwriteshark的专栏 3381

清华数据结构列车调度AC100分

两种思路(1)将目标栈的数据和待混洗的数据逐个进行比较#pragma warning(disable:4996) #include<stdio.h> #include<string.h> #define maxn 1600005 using namespace std; char a[2*maxn][5];//记录操作命令 int stack[maxn]; char pop...

hgtjcxy的博客 924

Windows C++网络编程:Boost.Asio从环境配置到TCP/UDP实战

网络编程是构建分布式系统和网络应用的核心技术,其核心在于高效管理I/O操作和数据传输。传统的底层API如Winsock,虽然功能强大,但代码复杂且难以维护。现代C++网络库通过封装操作系统差异,提供了统一的异步编程模型,极大地提升了开发效率和代码可移植性。其中,基于前摄器(Proactor)模式的异步I/O框架,允许开发者以非阻塞方式处理大量并发连接,这对于构建高性能服务器至关重要。Boost.Asio正是这一理念的杰出代表,它抽象了不同平台(如Windows的IOCP和Linux的epoll)的底层机制。

weixin_33924312的博客 359

UniApp实战:从文件下载到本地保存与预览的一站式解决方案

本文深入解析了UniApp开发中文件下载、保存与预览的完整流程,提供了基于uni.downloadFile、uni.saveFile和uni.openDocument API的一站式实战解决方案。文章详细拆解了核心API的使用方法、多平台(App、H5)的兼容性处理、常见坑点(如文件路径、权限、格式支持)以及进阶优化技巧(如进度提示、文件管理),旨在帮助开发者构建健壮、用户体验良好的跨平台文件处理功能。

d3e4f的博客 614

PaddleOCRv5训练自己的模型-微调文字识别模型

本文介绍了使用PaddleOCR微调文字识别模型的具体步骤。首先需要按照官方格式准备数据集,包括图片和标注文件。然后进行模型训练,包括环境安装、预训练模型下载、配置文件修改等关键环节,特别针对训练中可能出现的类别数不匹配问题提供了三种解决方案。文章还详细说明了模型导出为静态图格式的方法,以及如何调用训练好的模型进行推理。整个过程涉及多个技术细节,如早停机制设置、断点续训方法等,为需要提升OCR识别精度的开发者提供了实用指导。

weixin_43827982的博客 3176

C++ WebSocket服务实战:基于WebSocket++与Asio构建高性能实时通信后端

WebSocket作为一种在单个TCP连接上进行全双工通信的网络协议,其核心原理是通过HTTP升级握手建立持久连接,实现服务器与客户端之间的低延迟、双向实时数据交换。这一技术为需要高实时性的应用场景提供了基础通信能力,具有显著的技术价值,尤其适用于在线游戏、实时数据监控、即时通讯和协同编辑等对响应速度和并发处理要求高的领域。在工程实践中,C++因其对系统资源的精细控制和出色的运行时性能,常被选作构建此类高性能服务的语言。本文聚焦于使用纯头文件库WebSocket++结合Asio网络库,从环境搭建、事件驱动模

weixin_34176694的博客 467

基于STM32的RS485土壤氮磷钾与PH传感器数据采集与OLED显示实战(附完整代码)

本文详细介绍了基于STM32单片机通过RS485协议采集土壤氮磷钾与PH传感器数据的实战项目。涵盖硬件选型、连接方法、Modbus-RTU通信协议解析、STM32程序实现及OLED显示,提供完整代码和调试技巧,适用于农业物联网环境监测系统。

kotlin6android的博客 339

[Boost基础]并发编程——asio网络库——定时器deadline_timer

asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求使用多线程和锁定,有些的避免了多线程编程带来的诸多有害副作用(如条件竞争、死锁等)。 目前asio主要关注网络通信方面,使用大量的类和函数封装了socket API,提供了一个现代C++风格的网络编程接口,支持TCP,ICMP,UDP等网络通信协议。但asio的异步操作

超越 4360

大学物理第二章 质点动力学详解

大学物理第二章 质点动力学概念详解

weixin_63026364的博客 1万+

【Power Compiler手册】13.UPF多电压设计实现(2)

在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,并且确认所有属性都匹配。因此,域合并成功,工具会丢弃来自BLOCK的域。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的非原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的非原子电源域与TOP设计中的原子电源域,发现电源域不匹配。在这个场景中,在约束传播期间,工具会比较BLOCK中的原子电源域与TOP设计中的原子电源域,发现它们的一些属性不匹配。

QRBQ 751

boost::asio名字空间中的deadline_time类:定时器

定时器是asio库中最简单的一个IO模型,提供等候时间终止的功能。 定时器功能的主要类是:deadline_timer类,类摘要如下使用定时器时的头文件:#include <boost/asio.hpp> #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::asio;1. 同步定时器//同步定时器的用

yvhqbat的博客 1125

高通GAIA V3命令参考手册的研读学习(15):自定制命令的详细工作描述

里的示例一样,手机APP发出这个GetManuFacturer的命令发0x0000,那么耳机回复:0x8000, 同时在回复的playload部分,用最多15个字节的ACSII码来表达制造商信息(因此最多15个字母)。那么这个APP在通过GAIA协议控制这个耳机时,不仅可以通过前面讲过的vendor ID来识别,也可以更进一步通过这个命令来识别这个耳机,到底是不是本公司的。通过这个可变长度的playload,真的是可以传达极多的事先约定的信息,相当的灵活,真是不错!这个命令用来得到设备的制造商信息。

qq_37191547的博客 399

boost-asio-1-定时器使用

boost-asio-1-定时器使用

大草的博客 1771

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

别再傻傻用sleep了!C++里管理大量定时器,试试Boost.Asio的deadline_timer(附完整代码)

本文深入探讨了C++中高性能定时器的实现方式,对比了传统线程休眠和条件变量方案的局限性,重点介绍了Boost.Asio的deadline_timer在管理大量定时器时的优势。通过实战测试和完整代码示例,展示了如何实现线程安全、高精度的定时器管理器,并集成到网络框架中,适用于心跳检测、超时控制等场景。

weixin_27240351的博客 276

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【boost学习】之boost::asio(1)——Timer定时器

先跟着boost文档中asio章节的指南中的几个lizi

华秋实的专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 大华摄像机RTSP断流
MVision
博客等级 码龄16年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值