一個簡單的 Web 服務器 [未完成]

最近學習C++,linux和網絡編程,想作個小(mini)項目.  就去搜索引擎, 開源中國, Sourceforge上找http server的項目.php

好吧,也去了知乎.    知乎上程序員氛圍好, 有很多經驗能夠借鑑.html

終極目標:本身實現(implement)一個WEB SERVER.  linux

感想: 算法和數據結構仍是很重要的...(一切的基礎啊...悔不當初爲何很差好學,去acm也好...)git

 

指導:Build a simple HTTP server in C    (有不會的就問stackoverflow, 因此說若是有一天這網站掛了,網站管理員都不會修了,由於沒有能夠問啊)程序員

 

資料:github

0.RFC1945:Hypertext Transfer Protocol -- HTTP/1.0    (http協議版本1.0)web

1.RFC2616: rfc2616 Hypertext Transfer Protocol -- HTTP/1.1   (講HTTP協議,版本1.1,114頁大小)算法

2.A Practical Guide to Writing Clients and Servers   (15頁打印紙的內容,略長略長,慢慢看)編程

  比RFC容易看,快速過一遍.安全

3.RFC2396:

4.RFC2732:

5.RFC822: Standard for ARPA Internet Text Messages

6.RFC1521:MIME part I

 

前導知識 prerequisites:

  0.網絡知識 (看TCP/IP Illustrated)

  1.網絡編程  (能夠看UNP, Unix Network Programming)

        (或者更好入門的Beej's Guide to Network Programming)

  2.系統API   (看APUE, Advanced Programming in the UNIX Environment Third Edition)

(書厚不是問題,反正之後都要看,早點看得了)

 

找到幾個輕量級的小項目:

1.nweb Tiny Webserver (谷歌搜出來的, 200行,靜態網頁,C,安全檢查)

  比較簡單,若是有點網絡編程的基礎的話,就是剛學完網絡編程就能寫出來的程度.

  用fork(),不用select().   看完後能夠用select作一次. 代碼中用了signal(),inet_addr()這些不推薦的函數. 能夠本身替代爲sigaction()和inet_aton()  

  如何寫一個daemon :Linux Daemon Writing HOWTO 

  我犯過的錯誤:  

  1. if(a=b)

  2.accept()調用時沒有初始化socklen_t addrlen = sizeof client_addr;

  3.發送圖片時沒有寫頭部 Content-Type: image/jpg

  4. 使用sprintf時沒有使格式和參數一一對應,致使未定義的結果.

  5. 調用select()時沒有注意nfds要加1 

  6.若是要用ipv6,彷佛不能用sa->ai_family = AF_UNSPEC;而只能用AF_INET6;否則問題提示"Connection refused"

  7.getaddrinfo()返回0是成功. 非0爲失敗(而仍是-1!!!!!!)

2.Tiny HTTPd (stackoverflow上有人推薦,500 行,C,支持CGI)

  (CSDN上有人解析源碼: 【源碼剖析】tinyhttpd —— C 語言實現最簡單的 HTTP 服務器 )

3.mongoose  (知乎上一個問題下說到了)

4.lighthttpd    (輕量級,高性能網站,安全、快速、兼容性好而且靈活的web server環境)

  (ChinaUNIX 的 lighttpd-1.4.20源碼分析   )

5.Zaver如何寫一個Web服務器 github: zyearn/zaver  (知乎上看到的, 高性能, http/1.1, 基本架構 : 非阻塞, event loop, 線程池)

6.Nginx (生產環境.  不知道爲何我會把這個放在這裏,裝飾下頁面......應該不會去看的)

 

 測試:

1. 壓力測試

  http_load

  webbench

  ab

 

還有一個問題,閱讀別人的代碼: 

  1.書:Code Reading  

  2.網頁:Tips For Reading Code

 

Further Study:

the c10k problem (10,000 connection)

相關文章
相關標籤/搜索