boost asio异步服务器(3)增加发送队列实现全双工通信
创始人
2025-01-20 15:05:57
0

增加发送节点

构造发送节点,管理发送数据。发送节点的类如下。

这个发送节点用于保证发送和接收数据的有效性。

增加发送队列

前边实现的是一个简单的echo服务器,也就是服务器将收到的内容发送给对应的客户端。但是在实际的服务器设计中,服务器是全双工工作的,也就是说,服务器会一直监听客户端的写事件,而在发送的过程中是可以在任意的时刻发送的。也就是说,实现全双工通信,需要对服务器的收发进行分离。

对于异步收发,也就是要实现一个读接口和写接口。但是,对于boost::asio会有一个问题,就是当调用async_read_some或者async_read_write的时候,由于tcp的缓冲区不够,会导致发送或者接收数据的时序错乱。大家可以参考我的这篇博客boost asio异步api(1)_asio 异步http服务端-CSDN博客

因此,我们需要维护一个发送队列,保证发送的时序性。但是,作为服务器的发送队列还需要考虑安全性,就是当多个客户端的线程来访问时的安全性。服务器调用发送接口基本上都是逻辑线程和boost::asio返回的网络线程不是一个线程,所以还应该给发送队列增加一把互斥锁,保证安全性

改造发送接口

这里需要介绍一下std::lock_guard这个类,这是c11的新特性,这里的泛型是std::mutex,send_lock是std::mutex的锁,这里生成的lock会随着作用域的结束,自动解锁。

改造接收接口

完整代码如下

codes-C++: C++学习 - Gitee.com

这里的服务器虽然实现了收发分离,但还是有缺陷,比如粘包问题。

相关内容

热门资讯

第7分钟了解!泸州大二辅助!一... 第7分钟了解!泸州大二辅助!一贯真的有辅助软件(有人有挂)-哔哩哔哩1、许多玩家不知道泸州大二辅助辅...
透视数据!贪玩娱乐科技,潮汕掌... 透视数据!贪玩娱乐科技,潮汕掌上娱脚本-好像存在有辅助器(哔哩哔哩)1、进入游戏-大厅左侧-新手福利...
第一分钟了解!吉祥填大坑有什么... 第一分钟了解!吉祥填大坑有什么诀窍,新鸿狐辅助软件是真的吗,讲义教程(有挂教学)-哔哩哔哩1、实时新...
在玩家背景下!hhpoker软... 在玩家背景下!hhpoker软件靠谱吗(透视)辅助安装(有挂规律)-哔哩哔哩1、hhpoker软件靠...
七分钟了解!贪吃蛇辅助器202... 七分钟了解!贪吃蛇辅助器2022!切实存在有辅助方法(有挂方法)-哔哩哔哩1、进入到贪吃蛇辅助器20...
今日!顺欣茶楼智能辅助器,微乐... 今日!顺欣茶楼智能辅助器,微乐家乡自建房辅助app-确实真的是有辅助软件(哔哩哔哩)小薇(辅助器软件...
第5分钟了解!福建十三水软件开... 第5分钟了解!福建十三水软件开发,来来舟山麻将辅助,教材教程(有挂透视)-哔哩哔哩1、用户打开应用后...
在玩家背景下!wepoker线... 在玩家背景下!wepoker线上大神(透视)辅助安装(有挂方略)-哔哩哔哩1、每一步都需要思考,不同...
8分钟了解!越乡有辅助软件!确... 8分钟了解!越乡有辅助软件!确实一直总是有辅助神器(有挂猫腻)-哔哩哔哩1.越乡有辅助软件 选牌创建...
第七分钟了解!陕西辅助,金虎爷... 第七分钟了解!陕西辅助,金虎爷辅助,手筋教程(有挂技巧)-哔哩哔哩1、打开软件启动之后找到中间准星的...