- 浏览: 450541 次
- 性别:
- 来自: 北京
最新评论
-
zsxxsz:
2202877 写道你好,请问一下acl库是否可以移植到arm ...
利用ACL开发并发网络服务器 -
taoshengyijiu20008:
非常不错啊
acl 服务器编程框架设计要点 -
lgqss:
最后的例子用了__thread,依然不能用在动态库中?
再谈线程局部变量 -
foxbryant88:
膜拜中~
我为什么要发明一个轮子? -
zsxxsz:
eryueniaobp 写道关于reset的使用,查看了 g ...
使用 acl 库编写高效的 C++ redis 客户端应用
文章列表
邮件做为最早和最广的互联应网用之一,已经与人们的生活息息相关。我们虽然经常使用 Outlook Express/Outlook/Foxmail 等邮件客户端发送邮件,但并不关心发送过程的细节。如果您是一名程序员,则偶尔需要自己写一个小程序来实现发送邮件的目的,本文将会介绍如何使用 acl 里的 smtp_client 模块快速实现一个邮件发送的客户端程序。下面是发送邮件一个简单流程:
220 inc365.com ESMTP mail for UNIX (mail1.0)
ehlo localhost
250-inc365.com
250-PIPELININ ...
经过了长时间的测试与项目实践,acl_cpp 1.1.1.2 版本终于发布了,acl_cpp 基于 C 语言版本的 acl 框架库而写的C++库,具备如下特性:
1)同步/异步网络通信框架;同步流既支持网络通信,又支持文件读写
2)多进程/多线程/非阻塞/触发器服务器框架
3)功能强大的 http 应用功能库(可以方便编写 http 客户端及 http 服务器,可以象写 java Servlet 一样写 WEB 应用程序)
4)流式邮件 mime 解析库,流式 xml 解析库以及流式 json 解析库
5 ...
在 Java 等语言中有一个关键字:final,该关键字专门用于禁止类继承的功能,而在以往的C++中却没有此关键字(据说最新的 C++ 规范增加了此关键字,但还未普及),在 acl_cpp 库中通过模板方式设计了 final 类的功能,下面 ...
一、概述
本节将继续说明有关线程编程常用 API 的使用方法,主要说一下与线程条件变量及线程信号通知的 API。通过这些 API 可以实现线程之间的同步及通信机制。
二、线程条件变量 API
1)初始化/销毁线程条件变量:pthread_cond_init/pthread_cond_destroy;在 acl 库中相应的 API 为 acl_pthread_cond_init/acl_pthread_cond_destroy。
/**
* 用线程条件变量属性初始化线程条件变量对象
* @param cond {pthread_cond_t*} 线程条件 ...
一、概述
在《线程编程常见API简介(上) 》中讲述了有关线程创建过程中常用的 API 的使用方法,本节继续讲述有关线程编程中常用 API 的使用方法。主要说明有关线程锁、线程局部变量等 API 的使用。
二、常用 ...
一、概述
本文主要讲述了 Posix 标准的常用线程 API 接口的使用,目前 Linux/Unix 均提供了遵循 Posix 标准的线程编程 API,微软提供了自己的一套接口,acl 线程模块库根据 Posix 标准,提供了跨平台(支持 LINUX/WIN32)的线程库,接口定义及参数含义均与 Posix 的相同。如果您对 Linux 下的线程 API 比较熟悉,则当需要移植您的程序至 WIN32 平台时,只要需要在所用线程 API 前加前缀 acl_,同时将 acl 的 lib_acl.a 及相应头文件集成到您的程序中,即可将 LINUX 下线程程序移植至 WIN32 ...
一、为什么需要流式编程
首先解释一下什么是流式编程,所谓流式编程是指编程接口可以接收部分输入数据,边接收边处理,不必等待完整数据。这好比 TCP 数据流,因为网络传输的因素,每次读操作并不能保证会获得完整的数据块,每次仅读取一部分数据,多次读取才可能会读到一块完整的数据,基于 TCP 的应用服务也比较多,象 HTTP/SMTP/POP 等服务都是基于 TCP 传输协议进行数据传输的,因为 TCP 流的流式特点,所以这些应用都定义了数据完整性的规则。正因为有了这些数据完整性规则,才使得编程变得简单,因此很多实现都是根据这些完整性原则在读取了完整数据后才进行处理。
流 ...
一、概述
之前写过几篇有关如何使用 acl 的服务器框架编写网络服务器程序的文章(如:协作半驻留式服务器程序开发框架),现在总结一下,简要说明一下 acl 中所支持的几种服务器模型。acl 服务器框架支持四种模式:非阻塞模型、进程池模型、线程池进程混合模型,以及触发器模型。这四种服务器模型基本覆盖了我们编程时的常见模式,其中的进程池模型(对应于 Postfix 中的 single_server 方式)与触发器模型(对于 Postfix 中的 trigger_server 方式)移植于 Postfix,非阻塞模型、线程池进程池混合模型由笔者编写。本文结合 acl 库,不仅指明了服 ...
现在成熟的开发库与开发框架有很多,所以平时我们在开发自己的应用程序时一般直接拿来用就可以了,所以当我先是开发出 C 语言版的 acl 框架库时有人认为是这个轮子是否值得发明,而当我再开发出基于 acl 的 C++ 版 ...
在文章《使用 acl::master_threads 类编写多进程多线程服务器程序》和《使用 acl::master_proc 类编写多进程服务器程序》中分别讲述了如何编写 LINUX 平台下阻塞式服务器程序的多线程和多进程方式。虽然这两种模式都可以处理并发任务,并且效率也不低,但是毕竟线程和进程资源是操作系统的宝贵资源,如果要支持非常高的并发请求,则会因为系统限制而不能创建更多的进程或线程。大家常见的 webserver Nginx 就是以支持高并发而闻名,Nginx 本身就是非阻塞设计的典型应用,当然还有很多其它服务器程序也是非阻塞的:ircd、Squid、Varnish、B ...
文章《快速创建你的服务器程序》讲述了基于 C 语言版本的 acl 服务器框架下如何开发多进程服务器应用程序。本文则讲述了基于 C++ 语言的 acl_cpp 服务器框架下如何开发多进程服务器应用程序,当然 acl_cpp 下的服务器框架内部也是基于 acl 的服务器框架的。关于基于acl_master 的服务器程序设计原理,请参考 《协作半驻留式服务器程序开发框架》。
一、类成员函数说明
master_proc 是一个纯虚类,其中定义的接口需要子类实现,如下:
/**
* 纯虚函数:当接收到一个客户端连接时调用此函数
* @ ...
文章《开发多线程进程池服务器程序》讲述了如何使用 acl 库中的服务器模板编写多进程多线程服务器程序,那个例子是用 C 语言实现的,acl_cpp 对 acl 库用 c++ 语言进行了封装,其中也包含服务器编程模块,本文主要讲述如何使用 acl_cpp 中的 master_threads 类编写可以由 acl_master 服务器父进程控制的服务器应用程序。关于基于acl_master 的服务器程序设计原理,请参考 《协作半驻留式服务器程序开发框架》。
一、类接口说明
master_threads 是一个纯虚类,其中定义的接口需要子类实现,如下:
...
在文章《用C++实现类似于JAVA HttpServlet 的编程接口 》中讲了如何用 acl_cpp 的 HttpServlet 等类来实现 WEB CGI 的功能,同时在文章《使用 acl_cpp 的 HttpServlet 类及服务器框架编写WEB服务器程序 》中也举例说明如何将基于 HttpServle ...
在 《用C++实现类似于JAVA HttpServlet 的编程接口 》 文章中讲了如何用 HttpServlet 等相关类编写 CGI 程序,于是有网友提出了 CGI 程序低效性,不错,确实 CGI 程序的进程开销是比较大的,本文就将说明依然是这些 HTTP 相关的类,如果在使用 acl_cpp/src/master 下的服务器框架类的条件下,可以非常方便地转为服务器程序。现在依然是使用 《用C++实现类似于JAVA HttpServlet 的编程接口 》示例中的 http_servlet 类,只是稍微修改一下 main 函数,就变成下面的情形:
/// ...
互联网刚兴起时,很多项目都是用 C /Perl 语言写的一大堆 CGI,一些老程序员可谓是偿尽了编程的苦,因为那时国内的技术水平普遍比较低,如果你会 CGI 编程,就已经算是行业中人了,如果你对 CGI 编程比较熟练,则就可以称得是“专家”了,后来技术不断进步,各种国外的新技术都进入中国并不断得到普及,CGI 就逐渐沦为一种落后的技术,后来的 PHP, JSP/Servlet, ASP 逐渐占领了 WEB 编程的技术市场,这个时候如果你说再用 C 写 CGI,别人会感觉是在和古人对话。现在主流的 WEB 开发语言一个很大的优势就是有各种相对成熟的基础库和框架,开发效率很高, ...