欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

Linux C++項目推薦:文件服務(wù)器+如何快速上手C++大項目

1 本次分享的意義

源碼地址:https://github.com/shangguanyongshi/WebFileServer.git

視頻講解:Linux C++項目推薦:WebFileServer文件服務(wù)器+如何快速上手C++大項目

學(xué)完C++和Linux編程后, 可以以WebFileServer文件服務(wù)器作為練手項目,比WebServer項目多了文件上傳的功能,更加有意義。

這次分享不單只是講解這個WebFileServer項目如何運行,也能讓大家掌握如何快速掌握自己不熟悉的C++項目。

2 項目功能

Web 文件服務(wù)器,通過瀏覽器發(fā)送 HTTP 請求管理服務(wù)器指定文件夾下的所有文件。主要功能包括:

  • 以 HTML 頁面形式返回該文件夾下的所有文件
  • 可以選擇本地文件上傳到服務(wù)器
  • 可以對列表中的文件文件執(zhí)行下載操作
  • 可以刪除服務(wù)器中的指定文件

3 整體框架

  • 使用 Reactor 事件處理模型,通過統(tǒng)一事件源,主線程使用 epoll 監(jiān)聽所有的事件,工作線程負(fù)責(zé)執(zhí)行事件的邏輯處理
  • 預(yù)先創(chuàng)建線程池,當(dāng)有事件發(fā)生時,加入線程池的工作隊列中,使用隨機選擇算法選擇線程池中的一個線程處理工作隊列的事件
  • 使用 HTTP GET 方法獲取文件列表,發(fā)起下載文件、刪除文件的請求。使用 POST 方法向服務(wù)器上傳文件
  • 服務(wù)端使用有限狀態(tài)機對請求消息進(jìn)行解析,根據(jù)解析結(jié)果執(zhí)行操作后,向客戶端發(fā)送頁面、發(fā)送文件或發(fā)送重定向報文
  • 服務(wù)端使用 sendfile 函數(shù)實現(xiàn)零拷貝數(shù)據(jù)發(fā)送

4 編譯和運行

  1. build 項目
sh ./build.sh

默認(rèn)的編譯不支持調(diào)試,可以修改makefile增加-g編譯選項。

然后再重新編譯,以方便調(diào)試代碼。

  1. 啟動文件服務(wù)器
./main
  1. 在瀏覽器端輸入 服務(wù)端ip:端口號(端口號默認(rèn)是8888)
serverip:8888

5 如何快速分析代碼

5.1 main函數(shù)入口

(gdb) b main
Breakpoint 1 at 0x5555555590ad: file main.cpp, line 3.

5.2 分析網(wǎng)絡(luò)模型

通過info threads可以看到 共有五個線程,其中主線程是調(diào)用了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

5.3 網(wǎng)絡(luò)數(shù)據(jù)收發(fā)

5.3.1 數(shù)據(jù)接收

斷點 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 數(shù)據(jù)并解析解析處理。

5.3.2 數(shù)據(jù)發(fā)送

斷點 send

說明數(shù)據(jù)的響應(yīng)也是在線程池的線程進(jìn)行的。

6 拓展建議

建議將本項目的功能一直到muduo庫進(jìn)一步測試,對比分析性能的差異。

也建議和nginx做更多測試對比。

這樣可以不斷優(yōu)化項目的性能,面試的時候也能有更多可以講解的內(nèi)容。

#我的失利項目復(fù)盤##校招過來人的經(jīng)驗分享##校招##簡歷中的項目經(jīng)歷要怎么寫##c++#
全部評論
mark一下項目地址
點贊 回復(fù) 分享
發(fā)布于 05-06 08:45 廣東

相關(guān)推薦

某公司一顆釘子:可以看看下面這幾個項目 云存儲項目:https://www.bilibili.com/video/BV1XPfTY8EGD/ 多線程任務(wù)隊列系統(tǒng):https://www.bilibili.com/video/BV1XS9dYsE9d/ RPC項目:https://www.bilibili.com/video/BV15ff4YsEPy/ web多人聊天:https://www.bilibili.com/video/BV1iYtrezEkA/ 仿寫redis之Qedis:https://www.bilibili.com/video/BV1a4zzYKEAt/
點贊 評論 收藏
分享
評論
點贊
2
分享

創(chuàng)作者周榜

更多
??途W(wǎng)
??推髽I(yè)服務(wù)