1. 程式人生 > >C++網路程式設計方面的開源專案

C++網路程式設計方面的開源專案

  • 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每年的活動

來自: http://www.zhihu.com/question/19655330