使用 acl 生成向导快速创建服务器程序

      在以前有关使用 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/

     svn: svn://svn.code.sf.net/p/acl/code/

     QQ 群:242722074

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值