有哪些适合学生参与的 C++,网络编程方面的开源项目?

关注者
1,316
被浏览
377,847

18 个回答

学生写网络编程的项目的话,推荐一下 workflow

代码地址 : github.com/sogou/workfl

最近几个月准备校招研究了下workflow,主要优势就是轻量,编译快速,但是里面东西挺多的。

看了下都是workflow开发者自己写的httpredismysqlkafka协议。可以写多功能的异步客户端。不需要链接其他的库。

之前写了自己的tcp库后,想自己添加http功能, 看别人一般都是http-parser或者Mongrel2的ragel生成的parser,这个就不是给人看的了。workflow这些自己写的协议,看起来还是挺轻量级的,容易阅读,可以结合csapp后面http那里一起看。

workflow里面内容虽多,但是模块化设计很清晰,可以选择相应感兴趣的部分阅读,使用,因为框架的统一性,其实把一个模块搞懂,其他就触类旁通了。可以看官方的架构图,模块,层级非常清晰。

还有个优势就是,这个库大量利用了OOP,现在大多数推荐学习的网络库比如大名鼎鼎的muduo都是基于对象的方式,对于c++初学者还是很少接触到面向对象的工程设计的。虽然他支持了很多协议和功能,但是合理的OOP设计,看起来就非常自然,各种任务都统一接口,用起来也很方便。

(ps. 今年在某c++厂实习的时候,真就人手一个muduo,协程库啥的,我也写了个协程的tcp库 Burger,很尴尬的是,面试官说今天听了几个协程库了,都听疲了,就没有多问,反而对OOP问的比较多)

可以看看他的类设计,和前面架构图相呼应,仔细阅读代码,可以学到很多OOP设计。

workflow还有就是优秀的内存管理机制,初学者看c++11之后的书都是推荐使用智能指针来管理,知乎或者Stack Overflow都有大量讨论智能指针的缺点,这个项目可以学会如何去很好的管理内存,这也是学习c++的必经之路。而不是迷信书本大量使用shared_ptr来给自己挖坑,现在c++岗面试官一般都会问智能指针,怎么实现,优点在哪,如果能仔细剖析缺点,说出为什么不用,无疑能展示出自己对于技术的思考。

如果在学校时间比较多的话,可以好好研究下workflow项目的东西,找点感兴趣的部分看看,比如IO模型,如何异步通信,如何写http协议,如何负载均衡,里面可以学的东西挺多的,感觉对于进大厂完全够用了。这里放一下我写的笔记 workflow笔记

workflow 笔记地址 : github.com/chanchann/wo

如果找工作时间紧的话,用workflow做二次开发或者以workflow做个项目也挺快的。我花了一个多月用workflow写了个http的restful框架 wfrest 。 因为简洁的接口,使得开发非常简单容易,而且性能有保障。

wfrest 项目地址 : github.com/wfrest/wfres

还有一个用几天开发的一个小应用 HttpDns , 在开发过程中能感受到这个框架独有的魅力,非常简单但又强大。 能利用他来做的项目还蛮多的,我觉得准备的校招项目就不要局限于人人都有的web server了。

wf-httpdns 项目地址 : github.com/chanchann/wf

可以感受下用workflow写个http请求多简单

#include <stdio.h>
#include "workflow/WFTaskFactory.h"

int main(void)
{
    WFHttpTask *task = WFTaskFactory::create_http_task("http://baidu.com/", 3, 2, [](WFHttpTask *task){
        const void *body;
        size_t size;
        if (task->get_resp()->get_parsed_body(&body, &size))
            fwrite(body, 1, size, stdout);
    });
    task->start();
    getchar();
    return 0;
}

最重要的感觉还是这个项目开发者非常活跃,可以加入群或者提issue,开发者都会马上回复,开发项目遇到问题,在群里问问都能得到解答。

谢邀,对于学生和刚入门的小伙伴来说,在基础知识掌握的情况下尽可能多的参与实践是能快速提升能力的,其中也包含大量优秀的开源项目,在此推荐几款供大家交流学习。


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 - 码云


码云 Gitee.com
发现更多优质开源项目:最新推荐 - 码云 - 开源中国
团队流畅、高效开发:码云企业版 - 码云 - 开源中国