
源码地址:https://github.com/shangguanyongshi/WebFileServer.git
视频讲解:Linux C++项目推荐:WebFileServer文件服务器+如何快速上手C++大项目

学完C++和Linux编程后, 可以以WebFileServer文件服务器作为练手项目,比WebServer项目多了文件上传的功能,更加有意义。
这次分享不单只是讲解这个WebFileServer项目如何运行,也能让大家掌握如何快速掌握自己不熟悉的C++项目。

Web 文件服务器,通过浏览器发送 HTTP 请求管理服务器指定文件夹下的所有文件。主要功能包括:

sh ./build.sh默认的编译不支持调试,可以修改makefile增加-g编译选项。

然后再重新编译,以方便调试代码。
./mainserverip:8888
(gdb) b main
Breakpoint 1 at 0x5555555590ad: file main.cpp, line 3.通过info threads可以看到 共有五个线程,其中主线程是调用了epoll,再加上README的讲解可以推断出来这个项目是单个epoll +线程池的模式
* 1 Thread 0x7ffff79a9740 (LWP 339328) "main" 0x00007ffff7c1c68e in epoll_wait (epfd=4, events=0x7fffffffaf14, maxevents=1024, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
2 Thread 0x7ffff79a8700 (LWP 339343) "main" futex_abstimed_wait_cancelable ( ) at ../sysdeps/nptl/futex-internal.h:320
3 Thread 0x7ffff71a7700 (LWP 339344) "main" futex_abstimed_wait_cancelable ( ) at ../sysdeps/nptl/futex-internal.h:320
4 Thread 0x7ffff69a6700 (LWP 339345) "main" futex_abstimed_wait_cancelable ( ) at ../sysdeps/nptl/futex-internal.h:320
5 Thread 0x7ffff61a5700 (LWP 339346) "main" futex_abstimed_wait_cancelable ( ) at ../sysdeps/nptl/futex-internal.h:320
断点 recv
Thread 4 "main" hit Breakpoint 4, __libc_recv (fd=5, buf=0x7ffff69a5600, len=2048, flags=0) at ../sysdeps/unix/sysv/linux/recv.c:24
24 ../sysdeps/unix/sysv/linux/recv.c: No such file or directory.
(gdb) bt
#0 __libc_recv (fd=5, buf=0x7ffff69a5600, len=2048, flags=0) at ../sysdeps/unix/sysv/linux/recv.c:24
#1 0x000055555555df4a in HandleRecv::process (this=0x55555558bb90) at event/myevent.cpp:38
#2 0x000055555555c114 in ThreadPool::run (this=0x55555558b2b0) at threadpool/threadpool.cpp:114
#3 0x000055555555bc5c in ThreadPool::worker (arg=0x55555558b2b0) at threadpool/threadpool.cpp:77
#4 0x00007ffff7f8a609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#5 0x00007ffff7c1c353 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95很明显,这个项目是在线程池的线程里读取socket 数据并解析解析处理。
断点 send

说明数据的响应也是在线程池的线程进行的。

建议将本项目的功能一直到muduo库进一步测试,对比分析性能的差异。
也建议和nginx做更多测试对比。
这样可以不断优化项目的性能,面试的时候也能有更多可以讲解的内容。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。