- Webbench是一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的性能,最多可以模擬3萬個並發連接去測試網站的負載能力。Webbench使用C語言編寫, 代碼實在太簡潔,源碼加起來不到600行。下載鏈接: LippiOuYang/WebBench · GitHub
- Tinyhttpd是一個超輕量型Http Server,使用C語言開發,全部代碼只有502行(包括注釋),附帶一個簡單的Client,可以通過閱讀這段代碼理解一個 Http Server 的本質。下載鏈接鏈接: LippiOuYang/Tinyhttpd · GitHub
- nginx: download 高性能web服務器
- libevent/libevent · GitHub C語言寫的事件驅動框架
- ACE :C++面向對象網絡編程工具包
- Boost.Asio :用於網絡和底層I/O編程的跨平台的C++庫
- Casablanca :C++ REST SDK
- cpp-netlib :高級網絡編程的開源庫集合
- Dyad.c :C語言的異步網絡
- libcurl :多協議文件傳輸庫
- Mongoose :非常輕量級的網絡服務器
- Muduo :用於Linux多線程服務器的C++非阻塞網絡庫
- net_skeleton :C/C++的TCP 客戶端/服務器庫
- nope.c :基於C語言的超輕型軟件平台,用於可擴展的服務器端和網絡應用。 對於C編程人員,可以考慮node.js
- Onion :C語言HTTP服務器庫,其設計為輕量級,易使用。
- POCO :用於構建網絡和基於互聯網應用程序的C++類庫,可以運行在桌面,服務器,移動和嵌入式系統。
- RakNet :為游戲開發人員提供的跨平台的開源C++網絡引擎。
- Tuf o :用於Qt之上的C++構建的異步Web框架。
- WebSocket++ :基於C++/Boost Aiso的websocket 客戶端/服務器庫
- ZeroMQ :高速,模塊化的異步通信庫
- 這個網站整理的比較全,介紹c和c++的項目: 值得推薦的C/C++框架和庫
應邀答題,很好奇這樣中規中矩的題目為啥要匿名。
首先說說“適合學生參與”。參與開源項目的開發者,來自各行各業的都有,並沒有哪些開源項目學生的比例明顯高於其它項目的。至於 GSoC,其項目也不是單獨為學生專門設計的,都只是從標准的開源項目里選出一些工作量大小適中的子項目專門讓學生參與而已。如果硬要說學生和其它開發者有什么不同的話,那就是學生的時間比其它行業的人會更充足一些,功利性會弱一些,貢獻可以更加不計回報一些。因此,並不存在什么項目更“適合學生參與”的說法,只要你願意,任何項目都是可以參加的。
然后說說“C++”。由於 C++ 學習難度太大,各種復雜特性太多,要想在項目中把 C++ 用好,一方面需要所有開發者都具備比較扎實的功底,另一方面還需要開發者彼此之間建立嚴格的規范和約定。對於以公司的形式進行的開發而言,這兩個條件比較容易滿足,只要通過招聘設置門檻,通過規章制度限制開發流程就行。但對於開源項目這種形式的開發而言,為了保證這兩個條件,項目必然表現出很強的排外性,開源的 C++ 項目往往對於外部貢獻者的接納程度要低於其它語言的項目,想要真正參與到一個開源 C++ 項目里是非常困難的。因此,在選擇項目的時候,不要把目光集中在 C++ 項目上,其它語言的項目也一樣可以參與。
再說說“網絡編程”。在決定參與“網絡編程”相關的項目之前,你需要先明確一下你參與開源項目的目的。如果只是為了熟悉“能夠聯網的程序”是怎么編寫,譬如電子郵件客戶端啊,簡易即時通訊軟件等,真的沒有必要非得參與一個“網絡編程”相關項目,自己寫幾個小程序練習一下就可以了。在“能夠聯網的程序”里面,網絡相關操作用到的無非就是幾個簡單的套接字 API 而已,所有和網絡相關的代碼,在整個代碼庫里面只會占到很小的比率。開發一個網絡應用程序的難點反而都在非網絡部分,譬如系統設計、模塊划分、各種細節的處理等等,這些才是真正值得學習的。要想學習這些內容,參與任何一個具有一定用戶數量和代碼規模的項目都可以學到,不要把自己的選擇面局限在“網絡編程”上。
當然,網絡操作占整個代碼庫較大比率的項目實際上也是存在的。不過這種類型的項目,處理的大多是大數據量、海量客戶、高負載、高並發之類的問題,這些難度就非常大了。然而這些問題,如果不是在具體工作中遇到非常具體的應用場景的話,光憑想象和少量幾台電腦做實驗是完全無法理解掌握的。既然在學生階段很難有機會去接觸這方面內容,不如先把基礎知識學好,基本功掌握更牢靠一些,把這部分知識留到工作之后再學。
最后回到我們最初的問題上,把“適合學生參與”、“C++”和“網絡編程”這三個限制條件都去掉之后,問題就變成了“有哪些開源項目”了。這個問題回答很容易:直接上 http:// sf.net 或 http:// code.google.com 搜一搜,能找到無數的開源項目,選擇面是非常廣的。至於“如何參與一個開源項目”,那又是另外一個不同的問題,如果感興趣的話可以新開一個話題單獨討論,這里就不多說了。
網絡編程看題主准備寫什么東西了,寫不同的東西用不同的框架。
拿我自己來說,我自己也是個學生,經常寫app服務器(拜移動應用太火所賜吧),由於服務器要兼顧app和web,所以一般用http(https)協議,開始我選擇的wt之類的框架,后來發現一些東西用起來各種不順(比如wt里的smtp居然沒有用戶名和密碼的接口,http請求不能異步等),所以又自己造了個輪子( https:// github.com/lucklove/sht tpd )。這個輪子是用來做app server用的,現在剛剛開始沒多久可能各方面比較缺,后期會補上。
如果題主願意參與進來我表示非常歡迎。如果題主想參與其他項目,這里有個小小的建議:盡量參與國人(特指用中文交流)的項目,避免交流上的困擾,把精力都放在項目上。
以上
網絡編程和c++完全是兩回事,前者只要明白webservice 怎樣運作, 然后套用API就好了。本身是沒有太多挑戰的, 除非涉及到復雜的算法來提高性能,但那是另外一回事。 C++的話需要很好的編程功底,是很要求對low level programming良好的掌握。 可以關注一下google for students每年的活動