在以前有关使用 acl 的技术文章(如:使用 acl::master_threads 类编写多进程多线程服务器程序 ,用 acl::master_aio 类编写高并发非阻塞服务器程序,使用 acl::master_proc 类编写多进程服务器程序)中,对如何使用 acl 服务器框架类编写服务器应用程序做了较为详细的描述,但手工输入这些代码毕竟是比较烦人的,在 acl 的 app/ 目录下有一个向导程序:wizard,可以帮助开发者快速生成服务器框架模板,开发者只需在相关位置添加业务逻辑代码即可。下面是使用 wizard 向导程序的简要过程:
首先在 acl 的根目录下编译所有的 acl 的基础库:make all,然后进入 app/wizard 目录生成 wizard 程序:make,运行 ./wizard,出现如下界面:
[zsx@localhost wizard]$ ./wizard select one below: m: master_service; d: db; h: http; q: exit # 上面过程提示用户生成哪种应用的程序,我们此处是编写服务器,所以选择:m >m # 接着 wizard 提示我们输入应用程序名称,此处可以写:echo_server please input your program name: echo_server # 然后 wizard 提示选择何种服务器框架模板,此处选择 t 表示使用多进程多线程服务器模板 # 各个参数类型说明如下: # t:多进程多线程服务器模板 # p:多进程服务器模板 # a:多进程非阻塞服务器模板 # g:触发器服务器模板 choose master_service type: t: for master_threads; p: for master_proc; a: for master_aio; g: for master_trigger; s: skip choose >t create echo_server/Makefile ok. create echo_server/echo_server.sln ok. create echo_server/echo_server.vcproj ok. create echo_server/Makefile.in ok create echo_server/stdafx.h ok create echo_server/stdafx.cpp ok create common_files ok! create echo_server/echo_server.cf ok. create echo_server/Makefile.in ok create echo_server/main.cpp ok create echo_server/master_service.h ok create echo_server/master_service.cpp ok create master_threads ok! ------------------------------------------------------------------------------ select one below: m: master_service; d: db; h: http; q: exit >q Bye!
OK,输入几个字母,按几下回车,一个相对完整的服务器程序便生成了。从上面的生成过程不难看出 wizard 向导程序不仅生成了源文件,而且生成了工程文件以及服务器配置文件。
进入 echo_server 目录,打开自动生成的 master_service.cpp 文件,修改 master_service::thread_on_read 函数内容如下:
bool master_service::thread_on_read(acl::socket_stream* conn) { acl::string buf; // 从客户端连接流中读取一行数据,读操作参见:acl_cpp/stream/istream.hpp if (client->gets(buf, false) == false) { printf("gets from client error, closed it!\r\n"); // 返回 false 通知服务器框架将该客户端连接关闭 return false; } // 将从客户端连接流中读到数据回写,写操作参见:acl_cpp/stream/ostream.hpp if (client->write(buf) == -1) { // 返回 false 通知服务器框架将该客户端连接关闭 printf("write to client error, closed it!\r\n"); return false; } // 返回 true 通知服务器框架继续监听该客户端连接的下一个请求过程 return true; }
同时修改 master_service::thread_on_accept 函数,内容如下:
bool master_service::thread_on_accept(acl::socket_stream* conn) { // 设置客户端连接读写超时时间(秒) conn->set_rw_timeout(10); // 向客户端发送欢迎信息 if (conn->format("+OK Welcome!\r\n") == -1) { printf("write to client error, close it!\r\n"); // 返回 false 通知服务器框架关闭客户端连接 return false; } // 返回 true 通知框架监控该客户端流的可读状态 return true; }
一个非常简单的 echo 服务器程序完成,编译之(make),然后先以命令行方式进行测试:./echo_server alone 该服务器程序提示如下信息:listen on: 127.0.0.1:8888,意思是它现在开始监听本机回路地址的 8888 端口。可以手工通过 telnet 命令测试它:
[zsx@localhost ~]$ telnet 127.0.0.1 8888 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK Welcome! hello world! hello world!
当然,正式的生产环境下需要将 echo_server 程序放在 acl_master 服务器框架下运行,部署方式参见:acl服务器模块的部署--示例 ,acl 服务器模块的部署 。
参考:
acl 库下载:https://sourceforge.net/projects/acl/
github 地址:https://github.com/acl-dev/acl
svn: svn://svn.code.sf.net/p/acl/code/
QQ 群:242722074
相关推荐
你可以选择配置RSTP(快速生成树协议)或MSTP(多实例STP)来优化链路使用。 6. **QoS**:设置服务质量以确保关键流量优先,如VoIP和视频流。这涉及CoS(Class of Service)和DSCP(Differentiated Services Code ...
根据提供的信息,我们可以总结出与"Cacti"相关的多个知识点,包括Cacti的基本概念、安装配置、使用手册、图表创建、以及与之相关的技术如RRDTool等。 ### Cacti简介 Cacti是一款基于Web的网络监控工具,主要用于...
- 创建访问控制列表(ACL),定义允许或拒绝特定流量的规则。 - 用于实现基于IP地址的访问控制。 **4.4.4 802.1x** - 配置802.1x认证,确保只有经过授权的用户才能接入网络。 - 支持多种认证方式,如RADIUS、...
了解STP的基本原理,配置BPDU(Bridge Protocol Data Unit)参数,以及RSTP(快速生成树协议)和MSTP(多实例生成树协议)。 七、WLAN 配置无线局域网,包括设置接入点,配置SSID,无线频道,加密方式(如WEP,WPA...
**功能:** 显示和编辑ACL(Access Control List)。 **用途:** 管理文件和文件夹的安全权限。 ##### 16. calc.exe **功能:** 计算器。 **用途:** 提供基础和科学计算功能。 ##### 17. cdplayer.exe **功能:** CD...
#### 四、快速配置向导 - **squid.conf语法**:了解squid.conf文件的基本语法结构,这是配置Squid的基础。 - **UserID**:定义运行Squid服务的用户身份。 - **端口号**:指定Squid监听的端口号,默认通常是3128。 - ...