一、概述
在文章 acl 服务器编程模型介绍,开发多线程进程池服务器程序---acl 服务器框架应用,快速创建你的服务器程序--single进程池模型 等文章中介绍了如何基于 acl 的 C 语言版编写服务器程序,而在 用 acl::master_aio 类编写高并发非阻塞服务器程序,使用 acl::master_proc 类编写多进程服务器程序,使用 acl::master_threads 类编写多进程多线程服务器程序 等文章则介绍了如何基于 acl 的 C++ 语言版本编写服务器程序。本文将介绍如何部署这些服务器程序。
二、启动方式
从文章 协作半驻留式服务器程序开发框架 --- 基于 Postfix 服务器框架改造 可以看出,acl 的服务器框架中有一个总控制后台程序 acl_master,由它来启动调度服务子进程程序(这些子进程程序由用户根据自身需要基于 acl 的服务器框架编写);在 acl_master 的启动脚本中,将 acl_master 的配置文件(参考:acl/dist/master/conf/main.cf)通过命令行传递给它,acl_master 程序根据其中的配置项 service_directory 指定的目录,扫描该目录下子进程的配置文件(每一个服务子程序一个配置文件),根据每个配置文件的配置项来控制、启动每个子进程,这种方式有点类似于 LINUX 系统中的 xinetd 控制启动子进程的方式,只是比 xinetd 功能更为强大、效率更高。
三、安装
3.1、安装目录
在 acl 服务器程序的安装目录(假设 acl 服务的安装目录为 /opt/acl)下,一般应有如下目录:
/opt/acl/libexec:存放包括 acl_master 在内的所有服务器程序;
/opt/acl/conf:存放 acl_master 的配置文件目录;
/opt/acl/conf/service:存放用户编写的服务器程序配置文件的目录;
/opt/acl/var/log:存放程序日志文件;
/opt/acl/var/pid:存放程序进程 ID 文件;
/opt/acl/var/private:当子进程监听 UNIX 域套接口时,该目录存放具有私有访问权限的 UNIX 域套接口文件;
/opt/acl/var/public:当子进程监听 UNIX 域套接口时,该目录存放具有公共访问权限的 UNIX 域套接口文件;
/opt/acl/sh:存放一些控制启动停止 acl_master 的脚本程序。
3.1、在 acl/lib_acl 目录下运行 make 命令时,acl_master 服务控制程序便生成于 acl/lib_acl/master 目录下,用户可以手工拷贝该程序至 libexec 目录下,同时将 acl_master 的配置文件 acl/dist/master/conf/main.cf 拷贝至 conf 目录下,并打开 main.cf 文件,将其中的 {install_path} 字符串替换成 acl 服务安装目录;
3.2、用户将自己基于 acl 的服务器框架模板编写的可执行程序也拷贝至 libexec 目录下,将该程序的配置文件拷贝至 conf/service 目录下,同时修改该配置文件,将其中的 {install_path} 字符串替换成 acl 服务安装目录,将 master_disable 的值设置成 no,master_command 后的值修改成用户编程的可执行程序名(不需要带程序路径);
3.3、将 acl/dist/master/sh/ 目录下的脚本程序拷贝至安装目录的 sh 目录(如:/opt/acl/sh)下,同时将其中的 {instal_path} 修改成安装目录,并给这些脚本增加可执行权限(可用 chmod +x 完成)。
四、快速安装
为了简便,acl 提供了一个简洁的方法,在 acl 的代码根目录下运行 make all; make install,则会将 acl_master 服务器主进程拷贝至 acl/dist/master/libexec/ 的 linux32/linux64 目录下,用户把自己的程序(如 acl/samples/master/ioctl_echo3/ioctl_echo3 程序)也拷贝至 acl/dist/master/libexec/linux64/ 下(如果您的系统是 linux32 位系统则需要拷贝到 acl/dist/master/libexec/linux32 目录下),同时把 acl/master/conf/service/samples/ioctl_echo.cf 配置文件拷贝到 acl/master/conf/service/ 目录下并改成用户自己的配置文件名(如 mytest.cf),打开此配置文件后将 master_disable 的值由 yes 改为 no(表示允许启动该配置文件控制的服务子进程),把其中 master_command 后的值改为用户自己的程序名(如 ioctl_echo3)。
现在就可以安装服务器模块了,进入 acl/dist/master 目录,运行 :./setup.sh 安装路径,如:
./setup.sh /opt/acl,则得到如下安装结果:
/opt/acl/libexec: 该目录存储服务器程序(acl_master 程序也存放在该目录下);
/opt/acl/conf:该目录存放 acl_master 程序配置文件 main.cf;
/opt/acl/conf/service:该目录存放服务子进程的程序配置文件,该路径由 main.cf 文件指定;
/opt/acl/var/log:该目录存放日志文件;
/opt/acl/var/pid:该目录存放进程号文件;
/opt/acl/sh:该目录存放控制脚本程序。
安装完毕后,用户可以运行启动 acl_master 的启动脚本:/opt/acl/sh/start.sh,然后手工 telnet 127.0.0.1 5001 (该端口由前面的示例配置文件指定),则一个简单的回显示服务器程序就 OK 了;如果不能返回正确结果,用户可以到安装目录(本例子中的 /opt/acl/var/log/)下查看 acl_master 主进程的日志文件 acl_master 查看里面记录的错误信息。
五、参考
acl 库下载:https://sourceforge.net/projects/acl/
svn: svn://svn.code.sf.net/p/acl/code/
使用 acl 生成向导快速创建服务器程序:http://zsxxsz.iteye.com/blog/1851701
QQ 群:242722074