C/C++服务器开发7大常用开源库,在这里简单介绍一下。
OpenSSL是一个开放源代码的安全套接字层密码软件库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。
这个库广泛被应用在互联网的网页服务器上,在使用Https的应用程序中也需要用到这个库来支撑Https业务。
TinyXML是一个开源的原生C++的XML解析库,能够在windows或linux中编译,同时TinyXML提供完整的在线文档,方便开发和使用。
这个解析库既能构建XML格式数据,也能解析XML数据。通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。
目前,由于其简便性和稳定性,使用ZLib license(可以用于开源和商业)等原因,TinyXML已经广泛被用于开源社区和商业系统中。
JSON是一个轻量级数据交换格式,其可读性好,数据量比XML格式小,被广泛作为网络传输的数据格式。
JsonCpp是一个序列化反序列JSON格式的开源C++库,被C++程序广泛使用(包括Chromium项目)。JsonCpp还有一个重要特性是其支持在JSON格式内注释,这对于使用JSON格式作为配置文件很有意义,可以给配置添加注释说明其用途。
一般情况下,客户端在和Web服务器的交互通信中,交互的数据都是用JSON格式,组装和解析JSON数据都需要用到JsonCpp库。
ProtoBuf是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:JAVA、c#、c++、go 和 Python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
Libevent 已经被广泛的应用,作为底层的网络库。著名分布式缓存软件memcached也是基于Libevent的,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。还有很多诸如Vomit、 Nylon、 Netchat等也在使用Libevent的。
TCMalloc 是 Google 开发的内存分配器,在不少项目中都有使用,例如在 Golang 中就使用了类似的算法进行内存分配。它具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器能够 scale。据称,它的内存分配速度是 glibc2.3 中实现的 malloc的数倍。现在被广泛用到各大应用系统中。这个模块也可以用来让MySQL在高并发下内存占用更加稳定。
memcached是一套分布式的快取系统,与redis相似,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。
但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。