【第22期】观点:IT 行业加班,到底有没有价值?

c++网络库调研

原创 2013年12月04日 15:36:34

网络库总结

 

在开源的C/C++网络库中,常用的就那么几个,在业界知名度最高的,应该是ACE了,不过是个重量级的大家伙,轻量级的有libevent, libev,还有 Boost的ASIO。

ACEhttp://www.cs.wustl.edu/~schmidt/ACE.html

ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层,使用的时候,要根据情况,看你从那一层来进行使用。支持跨平台。

ASIOhttp://think-async.com/

Boost的ASIO是一个异步IO库,封装了对Socket的常用操作,简化了基于socket程序的开发。支持跨平台。

libevent

libevent是一个C语言写的网络库,官方主要支持的是类linux 操作系统,最新的版本添加了对windows的IOCP的支持。由于IOCP是异步IO,与linux下的POLL模型,EPOLL模型,还有freebsd的KQUEUE等这些同步模型在用法上完全不一致,所以使用方法也不一样,就好比ACE中的Reactor和Proactor模式一样,使用起来需要转变思路。如果对性能没有特别的要求,那么使用libevent中的select模型来实现跨平台的操作, select模型可以横跨windows, linux, unix,solaris等系统。

libev

libev是一个C语言写的,只支持linux系统的库,我以前研究的时候只封装了EPOLL模型,不知道现在的新版有没有改进。使用方法类似libevent,但是非常简洁,代码量是最少的一个库,也就几千行代码。显然这样的代码跨平台肯定是无法支持的了,如果你只需要在linux下面运行,那用这个库也是可以的。

Muduohttp://code.google.com/p/muduo/

 

在做网络开发时用到的一些库
1. libnet
提供的接口函数主要实现和封装了数据包的构造和发送过程.
地址:http://libnet.sourceforge.net/

2. libdnet
为几个低级网络例程提供了一个简化的接口在,包括网络地址处理,内核arp(4) 和 route(4)表处理,防火墙,接口配置,以及原始以太网和IP数据包传输。
地址:http://libdnet.sourceforge.net/

3. libpcap
提供的接口函数主要实现和封装了与数据包截获有关的过程。
地址:http://www.tcpdump.org/

4. libicmp
相对较为简单,它封装的是ICMP数据包的主要处理过程(构造、发送、接收等)。
地址:http://www.securityfocus.com/data/tools/libicmp.tar.gz

5.libnids
提供的接口函数主要实现了开发网络入侵监测系统所必须的一些结构框架。
地址:http://libnids.sourceforge.net/

6. libevent
这个东西可真是个好东西,如果是ACE太庞大的话,libevent真可谓是麻雀虽小,五脏俱全,支持的高性能网络IO有:/dev/poll,
kqueue, select, poll和linux 2.6内核中最强的epoll,同时也支持realtime
signal,用这个东西同样也可以兼容WIN32平台,只不过可惜的是它并没有实现WIN32平台下效率最高的IOCP。
不过对于网络游戏的服务器来说,这个东西的确是个好东西,对跨平台的兼容十分到位。
地址:http://monkey.org/~provos/libevent/

7. winpcap
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:
     1> 捕获原始数据报,包括在共享网络上各主机发送/接收的以及相互之间交换的数据报;
     2> 在数据报发往应用程序之前,按照自定义的规则将某些特殊的数据报过滤掉;
     3> 在网络上发送原始的数据报;
     4> 收集网络通信过程中的统计信息。

     winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据报。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据报的发收,它仅仅只是监听共享网络上传送的数据报。因此,它不能用于QoS调度程序或个人防火墙。
地址:http://www.winpcap.org/

8. libdcap
The libdcap library provides a POSIX like open, create, read,
write and lseek functions to the dCache storage. In addition there are
some specific functions for setting debug level, getting error messages
and binding the library to a network interface.
地址:http://www-dcache.desy.de/manuals/libdcap.html

 

 

 

版权声明: 举报

相关文章推荐

开源C/C++网络库比较

在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO。 ACE是...

开源免费的C/C++网络库(c/c++ sockets library)

(1)ACE 庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。 http://www.cs.wustl.edu/~schmidt/ACE.html   (2)Asio As...
  • earbao
  • earbao
  • 2013-09-02 17:06
  • 5310

C++网络通信库性能大比拼

C/C++网络通信库有不少,本次benchmark的目的是为了公平的评估它们的网络I/O性能,当然是作为REST server, 因此每个server都写了一些代码,好在不是特别复杂。这个测试经过了好...

高性能C++网络库libtnet实现:http

HTTP libtnet提供了简单的http支持,使用也很简单。 一个简单的http server: void onHandler(const HttpConnectionPtr_t& ...

游戏服务端之C++网络库对外接口

大多数的情况下,游戏的服务端都是在Linux下运行,但是Linux下做开发C/C++的开发相对来说是比较困难的。所以一般来说,游戏的服务端都是做成可移植的,这样方便在Windows下做开发。也就是说,...

C++ 用libcurl库进行http 网络通讯编程

一、LibCurl基本编程框架 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libc...

谈谈网络编程(基于C++)

这篇文章讲了一点网络编程的一些新路,一点体悟。学习就是这种不断总结提高的过程。 设计到进程,线程,线程池,reactior和proactor并发编程模式,IOCP,linux下的epoll。。。。。...

C++ Socket编程实例解析

Socket socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具...

C++卷积神经网络实例:tiny_cnn代码详解(1)——开篇

在之前完成了《C++开发人脸性别识别教程》系列博客的编写之后,我开始将工作重点转移到与我的研究生课题关联更为密切的深度学习上来。深度学习编程有几个经典的框架,首屈一指的当属Caffe,然后还有Matl...

C++ 网络编程(TCP)

SYN ACK FIN RST PSH URG 详解三次握手Three-way Handshake 一个虚拟连接的建立是通过三次握手来实现的 (B) –> [SYN] –> (A) 假如服务器A和...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)