一、课程信息
打卡时间: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一段时间再传输,这样可以提高效率。同时,我们还需要给客户端的进程加入心跳机制,便于守护进程的维护工作。
四、学习截图
共同学习,写下你的评论
评论加载中...
作者其他优质文章