为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第8天 构建基于TCP协议的文件传输系统_5

标签:
C++ 活动

一、课程信息

打卡时间:2022.8.10
课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
章节名称:开发基于tcp协议的文件传输子系统
讲师: 长歌_吴从周

二、今日课程

课程内容:(1)完成客户端文件上传功能的异步通信(2)客户端文件上传程序的收尾工作

三、学习心得

通过demo程序的测试可以看到异步上传效率是同步上传效率的好几倍。在对比上传效率的时候需要查看日志文件,了解在某一秒内文件上传成功的数量,这时候可以用:

可以用
grep "xxxxx" /tmp/demo31.log|wc
来查找/tmp/demo31.log文件中"xxxxx"出现的次数

这个语句在统计日志文件中行数非常好用,可以在日志文件中查看某一秒内客户端发送的报文数量。
多进程的异步通信方式最简单的办法就是父进程用于发送报文,子进程用于接收报文,不过由于多进程的办法需要开辟额外的进程,因此可以选择效率较低一些,但是不需要耗费额外资源的I/O复用的方式用于实现异步通信。可以使用tcpread完成I/O复用的异步通信,缺省情况下tcpread函数是阻塞的,只有当接收缓冲区有值的时候才会读取,在单进程的境况下完成异步通信则可以设置tcpread的timeout参数为-1表示不等待,这样就可以实现复用一个I/O口实现异步通信。
之前采用同步通信的方式完成文件上传的功能,通过实验可以看到,采用IO复用技术的poll来实现异步通信具有更高的效率,因此本次学习将原本的同步程序改为I/O复用的异步程序了。
除此之外,还有一些收尾工作,比如在实际文件传输过程中,客户端待传输文件产生的时间是不一定的,因此为了程序运行效率考虑,当程序文件传输成功的时候就说明程序正忙,所以不需要sleep,接着扫描文件夹。当文件传输失败时,说明当前待传输数据少,可以让客户端sleep一段时间再传输,这样可以提高效率。同时,我们还需要给客户端的进程加入心跳机制,便于守护进程的维护工作。

四、学习截图

图片描述图片描述

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消