- 浏览: 450480 次
- 性别:
- 来自: 北京
最新评论
-
zsxxsz:
2202877 写道你好,请问一下acl库是否可以移植到arm ...
利用ACL开发并发网络服务器 -
taoshengyijiu20008:
非常不错啊
acl 服务器编程框架设计要点 -
lgqss:
最后的例子用了__thread,依然不能用在动态库中?
再谈线程局部变量 -
foxbryant88:
膜拜中~
我为什么要发明一个轮子? -
zsxxsz:
eryueniaobp 写道关于reset的使用,查看了 g ...
使用 acl 库编写高效的 C++ redis 客户端应用
文章列表
一、概述
acl 工程是一个跨平台的通用网络通信库及服务器编程框架,同时提供更多的其它有价值功能。通过该库,用户可以非常容易地编写支持多种模式的服务器程序、WEB 应用程序以及数据库应用程序。此外,该库还提供了 XML/JSON/MIME 编码及解码功能,这些编码解码库均支持流式解析模式,从而使之更适应不同的网络通讯方式。
本工程主要包含 5 个库及大量示例。5 个库的说明如下:
1) lib_acl: 该库是最基础的库,其它 4 个库均依赖于该库; 该库以 C 语言实现。
2) lib_protocol: 该库主要实现了 http/ping/smt ...
一、概述
非阻塞网络编程无疑成了高并发、高性能编程的代名词,但现实应用编程中并不是每种应用都需要采用非阻塞编程模式,因为这将大大增加编程的复杂性、开发周期以及出错率,所以我们写的绝大部分网络程序程序都是阻塞的,一般是一个进程一个网络连接或一个线程一个网络连接。即然非阻塞模式可以实现高并发网络连接,阻塞模式可以实现复杂的业务逻辑,那是否有办法将二者结合起来呢?答案是肯定的,其中在 acl_cpp 库中,ipc 目录下的模块就是为了满足这种需求而设计的。
在文章《acl_cpp 非阻塞模块的IPC通信机制》和《ipc_service 类:阻塞与非阻塞混合编程》中分别以 ...
文章《用C++实现类似于JAVA HttpServlet 的编程接口》中讲述了如何使用 acl_cpp 库之 HTTP 模块编写象 Java Servlet 一样的 WEB 应用。其中也讲到了 acl_cpp HTTP 模块中有关 Http Session、Cookie 的使用方法。而作为 WEB 编程中非常重要的网页模板引擎在 acl_cpp 并未实现。本文将结合谷歌的 ctemplate 库,讲解如何使用 acl_cpp 的 WEB 类库和谷歌的 ctemplate 模板引擎库来实现类似于 Java Servet + Velocity 的 WEB 应用。当然,用户也可以根据需 ...
在文章 多线程开发时线程局部变量的使用 中,曾详细提到如何使用 __thread (Unix 平台) 或 __declspec(thread) (win32 平台)这类修饰符来申明定义和使用线程局部变量(当然在ACL库里统一了使用方法,将 __declspec(thread) 重定义为 __thread),另外,为了能够正确释放由 __thread 所修饰的线程局部变量动态分配的内存对象,ACL库里增加了个重要的函数:acl_pthread_atexit_add()/2,此函数主要作用是当线程退出时自动调用应用的释放函数来释放动态分配给线程局部变量的内存。以 __thread 结合 a ...
一、概述
现在大家在和Java, PHP, .net写应用程序时,都会用到一些成熟的服务框架,所以开发效率是比较高的。而在用C/C++写服务器程序时,用的就五花八门了,有些人用ACE, 有些人用ICE(号称比ACE强许多),等等,这类 ...
1、概述 本节主要描述了以进程池模式创建服务器程序的过程,而该进程池框架是以 acl_master 模板为管理进程,以 acl_single_server 单一进程池模式为半驻留进程池模板创建的。该进程池模型有如下特点: 1.1)半驻留进程 ...
一、 概述
在当今网络应用中,各种开源服务器可谓遍地开花。Web服务器如 Apache、AOL-Server、Lighttpd等;数据库服务器如:Mysql、PostgreSQL;MTA服务如Postfix、 Sendmail、Qmail等;HTTP代理服务器有Squid、Oops等。每一类服务器的设计都比较复杂且相关性较强,它们所用的服务器框架通用性不够,很难提炼出来,形成相对独立的服务器框架,供程序员快速开发自己的项目。在我们习惯了JAVA、.NET、PHP等快速开发带给我们的快乐时,却逐渐地远离的程序设计的本质,结果是知其然面不知所以然。好的开发框架及开发工具固然大大提高了软 ...
在WIN32平台进行编程时,经常会遇到工作进程因为程序内部BUG而异常退出的现象,当然为了解决此类问题最好还是找到问题所在并解决它,但如果这类导致程序崩溃的BUG并不是经常出现,只有当某种条件发生时才会有,在我们解决BUG的时间里,为了尽最大可能地为用户提供服务可以采用一种父进程守护机制:当子进程异常退出时,守护父进程可以截获这一消息,并立即重启子进程,这样用户就可以继续使用我们的程序了,当然如果子进程的问题比较严重频繁地 DOWN掉,而父进程却不停地重启子进程的话,势必造成用户机系统资源的大量耗费,那我们的程序就如病毒一样,很快耗尽了用户机资源,所以需要父进程能够智能地控制重启子进程的时间 ...
1、概述 操作系统在API层为我们提供了进行网络通讯的库(一组socket函数库),但使用起来未免复杂,而且极易出错,虽然这些socket库最初起源于 BSD系统,各个操作系统厂商都提供了自身平台的接口实现,但这些接口在不同OS上又略有差别,所以当你想写一个跨平台的网络通信程序时,工作量还是有的,并且如不知晓各个平台下的差异也极易出错。 本节向你介绍了怎样使用ACL库中的数据流(ACL_VSTREAM)来快速搭建你的网络通信程序;另外,ACL_VSTREAM 不仅是跨平台的,而且既可用于网络通信流,又可用于文件流,本节仅介绍网络流的例子。 2、网络通信函数接口说明 2.1)服 ...
一、概述 在当今强调多核开发的年代,要求程序员能够写出高并发的程序,而利用多个核一般有两种方式:采用多线程方式或多进程方式。每处理一个新任务时如果临时产生一个线程或进程且处理完任务后线程或进程便立 ...
1、概述 本节结合 "利用ACL库开发高并发半驻留式线程池程序" 和 "利用ACL库快速创建你的网络程序" 两篇文章的内容,创建一个简单的线程池网络服务器程序。 2、并发式网络通信实例
#include "lib_acl.h" ...
一、概述
对于 C/C++ 网络协程库,仅提供网络通信功能是远远不够的,如果想要将协程应用于复杂的应用环境中,一些基础性设施是必须的,比如”协程同步“功能。在 acl 协程中,提供了两种应用场景下的同步机制:单机线程内协程之间的同步以及可以跨线程间的协程同步功能。
因为 acl 协程的调度器是单线程的(如果想用多核,可以启动多个线程,每个线程独立进行调度),所以如果你的应用场景仅需线程内不同协程间的同步,则只需使用 fiber_lock/fiber_sem 即可,其中 fiber_lock 为协程同步锁,fiber_sem 为协程信号量,其实现原理本质上是协程执行上下文的切 ...
在《使用 acl 协程编写高并发网络服务》和《使用协程方式编写高并发的 WEB 服务》两篇文章中介绍了如何使用 acl 的协程功能编写高并发服务器程序,本文主要介绍如何编译使用 acl 的网络协程库。
一、 acl 协程库的依赖关系
目前 acl 协程主要分为 C 库(lib_fiber.a,在 acl/lib_fiber/c 目录下)和 C++库(libfiber_cpp.a,在 acl/lib_fiber/cpp 目录下),其中 lib_fiber_cpp.a 依赖 libfiber.a,具体的依赖关系如下:
libfiber.a ...
在文章《使用 acl 服务器框架编写负载均衡的应用服务》中介绍了 acl TCP 连接分配器的作用及原理,本节主要介绍 TCP 连接分配器的配置方法,及使用 acl 的服务器模板创建的应用服务子进程的配置方法(目前支持该功能 ...
在《使用 acl 库针对 C++ 对象进行序列化及反序列编程》中介绍了 acl 库中针对 C/C++ 的 struct 对象进行序列化和反序列化的功能,并且给出了一个简单的例子。本文将介绍一些较为复杂的例子。
一、示例一:支持多继承的例子
先定义 struct.stub 文件:
#pragma once
#include <string>
struct student
{
std::string shcool;
std::string class_name;
};
struct province
{
std ...