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

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

相关内容

热门资讯

透视辅助!wepokerplu... 无需打开直接搜索;操作使用教程:透视辅助!wepokerplus透视挂真的假的,wepoker开挂辅...
为切实保障!微乐智能辅助app... 为切实保障!微乐智能辅助app,三哥玩辅助器,妙招教程(一贯确实有挂)-哔哩哔哩1、操作简单,无需注...
据监测!道游互娱辅助(辅助挂)... 据监测!道游互娱辅助(辅助挂)原来真的是有挂(有挂总结)-哔哩哔哩1、据监测!道游互娱辅助(辅助挂)...
目前来看!红龙poker有辅助... 目前来看!红龙poker有辅助吗,wpk俱乐部是真的吗,操作教程(一贯透视是有挂的)-哔哩哔哩1、实...
透视辅助!wepoker德州出... 透视辅助!wepoker德州出牌规律,微乐扑克辅助器免费版,安装教程(推荐攻略开挂辅助器)是一款可以...
此事引发网友热议!亲友圈辅助吧... 此事引发网友热议!亲友圈辅助吧,潮汕汇辅助神器,步骤教程(原来确实有挂)-哔哩哔哩此事引发网友热议!...
反观!川南休闲辅助(辅助挂)其... 反观!川南休闲辅助(辅助挂)其实真的有挂(有挂资料)-哔哩哔哩1、许多玩家不知道川南休闲辅助辅助软件...
此事引发广泛关注!wpk透视是... 此事引发广泛关注!wpk透视是真的假的,wepoker免费透视脚本,指南教程(一直透视真的是有挂)-...
辅助工具!wepoker开挂辅... 您好:wepoker开挂辅助挂教程的软件,软件加客服确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
围绕透视问题!闲逸辅助app下... 围绕透视问题!闲逸辅助app下载,多乐跑辅助,课程教程(果然确实有挂)-哔哩哔哩亲,关键说明,闲逸辅...