標籤:

有哪些適合學生參與的 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 · GitHubC語言寫的事件驅動框架
  • 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++框架和庫


謝邀,對於學生和剛入門的小夥伴來說,在基礎知識掌握的情況下儘可能多的參與實踐是能快速提升能力的,其中也包含大量優秀的開源項目,在此推薦幾款供大家交流學習。

1. 項目名稱:基於C++11 的高性能網路伺服器 evpp

項目簡介: evpp 是一個基於 libevent 開發的現代化 C++11 高性能網路伺服器,自帶 TCP/UDP/HTTP 等協議的非同步非阻塞式的伺服器和客戶端庫,具有如下特性:

  • 現代版的 C++11介面
  • 非阻塞非同步介面都是 C++11 的 functional/bind 形式的回調仿函數(不是 libevent 中的C風格的函數指針)
  • CPU 多核友好和線程安全
  • 非阻塞純非同步多線程 TCP 伺服器/客戶端
  • 非阻塞純非同步多線程 HTTP 伺服器/客戶端
  • 非阻塞純非同步多線程 UDP 伺服器
  • 支持多進程模式
  • 優秀的跨平台特性和高性能(繼承自 libevent 的優點)
  • 已經經過詳盡的測試,並已經用於生產環境,每天承載數萬億次的網路通信
  • 非常容易安裝和集成,evpp 能夠很容易就打包出 deb/rpm/tar.gz 等格式的安裝包

項目地址:zieckey/evpp - 碼雲

2. 項目名稱:基於 C++11 的輕量級網路框架

項目簡介: 本項目是一個基於 C++11 的輕量級網路框架,基於線程池技術可以實現大並發網路 IO。

項目地址:夏楚/ZLToolKit - 碼雲

3. 項目名稱:基於 socks4/5 的代理伺服器實現

項目簡介: 本項目是一個支持 socks4/5 udp 代理協議的 socks 代理伺服器實現。

項目地址:Jack.arain/socks_server - 碼雲

4. 項目名稱:基於 C++ 的網路通信庫及伺服器編程框架

項目簡介: acl 工程是一個跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的網路通信庫及伺服器編程框架,同時提供更多的實用功能庫。通過該庫,用戶可以非常容易地編寫支持多種模式(多線程、多進程、非阻塞、觸發器、UDP方式、協程方式)的伺服器程序,WEB 應用程序,資料庫應用程序。此外,該庫還提供了常見應用的客戶端通信庫(如:HTTP、SMTP、ICMP、redis、memcache、beanstalk、handler socket),常見流式編解碼庫:XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 etc。

項目地址:acl-dev/acl - 碼雲

5. 項目名稱:基於協程的 C++ 網路開發框架

項目簡介: 本項目是一個基於協程的C++網路開發框架,主要的特點是:

  • 跨平台:同時支持 Linux32/64、OSX64 兩個平台,支持 C++11及以上;
  • 易開發:同步的方式編寫代碼,支持類Mina的filter過濾鏈、簡單而不失強大;
  • 高性能:可同時處理海量連接,框架無鎖設計,性能超群;
  • 多特性:代碼同步調用方式、支持網路過載保護、支持空閑連接自動清理等企業級特性;

項目地址:cxxjava/CxxConet - 碼雲

6. 項目名稱:簡潔易用的 C++11 網路庫

項目簡介: 本項目是一個簡潔易用的 C++11網路庫,主要特性如下所示:

  • 支持單機千萬並發連接
  • 多平台支持
  • 支持優雅退出
  • 高性能
  • 支持半同步半非同步處理
  • openssl 支持
  • protobuf 支持
  • udp 支持

項目地址:yedf/handy - 碼雲

碼雲 http://Gitee.com

發現更多優質開源項目:最新推薦 - 碼雲 - 開源中國

團隊流暢、高效開發:碼雲企業版 - 碼雲 - 開源中國


網路編程看題主準備寫什麼東西了,寫不同的東西用不同的框架。

拿我自己來說,我自己也是個學生,經常寫app伺服器(拜移動應用太火所賜吧),由於伺服器要兼顧app和web,所以一般用http(https)協議,開始我選擇的wt之類的框架,後來發現一些東西用起來各種不順(比如wt里的smtp居然沒有用戶名和密碼的介面,http請求不能非同步等),所以又自己造了個輪子( https://github.com/lucklove/shttpd)。這個輪子是用來做app server用的,現在剛剛開始沒多久可能各方面比較缺,後期會補上。

如果題主願意參與進來我表示非常歡迎。如果題主想參與其他項目,這裡有個小小的建議:盡量參與國人(特指用中文交流)的項目,避免交流上的困擾,把精力都放在項目上。

以上


應邀答題,很好奇這樣中規中矩的題目為啥要匿名。

首先說說「適合學生參與」。參與開源項目的開發者,來自各行各業的都有,並沒有哪些開源項目學生的比例明顯高於其它項目的。至於 GSoC,其項目也不是單獨為學生專門設計的,都只是從標準的開源項目里選出一些工作量大小適中的子項目專門讓學生參與而已。如果硬要說學生和其它開發者有什麼不同的話,那就是學生的時間比其它行業的人會更充足一些,功利性會弱一些,貢獻可以更加不計回報一些。因此,並不存在什麼項目更「適合學生參與」的說法,只要你願意,任何項目都是可以參加的。

然後說說「C++」。由於 C++ 學習難度太大,各種複雜特性太多,要想在項目中把 C++ 用好,一方面需要所有開發者都具備比較紮實的功底,另一方面還需要開發者彼此之間建立嚴格的規範和約定。對於以公司的形式進行的開發而言,這兩個條件比較容易滿足,只要通過招聘設置門檻,通過規章制度限制開發流程就行。但對於開源項目這種形式的開發而言,為了保證這兩個條件,項目必然表現出很強的排外性,開源的 C++ 項目往往對於外部貢獻者的接納程度要低於其它語言的項目,想要真正參與到一個開源 C++ 項目里是非常困難的。因此,在選擇項目的時候,不要把目光集中在 C++ 項目上,其它語言的項目也一樣可以參與。

再說說「網路編程」。在決定參與「網路編程」相關的項目之前,你需要先明確一下你參與開源項目的目的。如果只是為了熟悉「能夠聯網的程序」是怎麼編寫,譬如電子郵件客戶端啊,簡易即時通訊軟體等,真的沒有必要非得參與一個「網路編程」相關項目,自己寫幾個小程序練習一下就可以了。在「能夠聯網的程序」裡面,網路相關操作用到的無非就是幾個簡單的套接字 API 而已,所有和網路相關的代碼,在整個代碼庫裡面只會佔到很小的比率。開發一個網路應用程序的難點反而都在非網路部分,譬如系統設計、模塊劃分、各種細節的處理等等,這些才是真正值得學習的。要想學習這些內容,參與任何一個具有一定用戶數量和代碼規模的項目都可以學到,不要把自己的選擇面局限在「網路編程」上。

當然,網路操作占整個代碼庫較大比率的項目實際上也是存在的。不過這種類型的項目,處理的大多是大數據量、海量客戶、高負載、高並發之類的問題,這些難度就非常大了。然而這些問題,如果不是在具體工作中遇到非常具體的應用場景的話,光憑想像和少量幾台電腦做實驗是完全無法理解掌握的。既然在學生階段很難有機會去接觸這方面內容,不如先把基礎知識學好,基本功掌握更牢靠一些,把這部分知識留到工作之後再學。

最後回到我們最初的問題上,把「適合學生參與」、「C++」和「網路編程」這三個限制條件都去掉之後,問題就變成了「有哪些開源項目」了。這個問題回答很容易:直接上 http://sf.net 或 http://code.google.com 搜一搜,能找到無數的開源項目,選擇面是非常廣的。至於「如何參與一個開源項目」,那又是另外一個不同的問題,如果感興趣的話可以新開一個話題單獨討論,這裡就不多說了。


推薦閱讀:

怎樣學習遊戲引擎開源代碼提升自己?
程序員如何加入到開源項目中去?
為什麼現在大部分開源庫都是外國人寫的?
Python 有哪些一千行左右的經典練手項目?
十萬行以下有哪些值得學習的開源項目?

TAG:開源項目 | C |