使用 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,出现如下界面:

[[email protected] 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 命令测试它:

[[email protected] ~]$ 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

时间: 2024-10-08 01:55:35

使用 acl 生成向导快速创建服务器程序的相关文章

使用向导快速创建spring boot应用

Spring Boot快速创建项目 IDE都支持使用spring的项目创建向导快速创建一个Spring Boot项目: 选择我们需要的模块:向导会联网创建我们需要的spring boot项目: 默认生成的Spring Boot项目: --主程序已经生成好了,我们只需要编写自己的逻辑代码 --resource文件夹 --static :静态资源文件 --template:保存我们的模板文件    --application.properties:Spring Boot应用的配置文件,可以修改默认值

2.使用向导快速创建SpringBoot应用

前面介绍了使用Maven的方式来创建一个SpringBoot应用,这已经很简单了,但还有更简单的方式,即使用向导快速创建. 1.安装Spring Initializr模块 若在新建Spring项目时发现左侧没有Spring Initializr模块,就需要在Plugins中安装Spring assistant. 2.新建Spring Initializr项目 项目建立之后发现pom.xml自动添加了很多配置文件 1 <?xml version="1.0" encoding=&qu

Spring-boot(一)通过向导快速创建Spring-boot项目

通过向导快速创建Spring-boot项目 创建步骤: 选择Spring Initializr 填写组织和模块名 选择对应的模块 注:这里左侧的模块比较多,玩家可以根据自己的实际需要自由选择,此处暂时选择web 完成 等待项目自动下载相关依赖完成项目创建 注:项目类型为maven的话,需要配置阿里云仓库才不会特别慢 setting.xml <mirrors> <mirror> <id>alimaven</id> <name>aliyun mave

Microsoft Sync Framework下的快速开发同步程序

Microsoft Sync Frameworks简称MSF,是一个综合的同步平台,MSF支持应用程序,服务,设备的在线以及离线同步.MSF主要有以下几个部件组成:     * Sync Services for ADO.NET: 同步ADO.NET的数据     * Sync Services for FeedSync: 同步 RSS 和 ATOM 种子     * Sync Services for File Systems: 同步文件和文件夹     * Sync Framework Co

Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序

首先需清楚Socket类提供了getInputStream()方法和getOutputStream()方法,分别返回输入流InputStream对象和输出流OutputStream对象.程序只需向数据流写数据,就能向对方发送数据:只需从输入流读数据,就能接收来自对方的数据. 创建服务器程序DemoServer01 public class DemoServer01 { /**  * @author 牧羊的伯格女皇  11/12  * @param args  * 创建服务端与客户端之间的相互通信

微信公众号可快速创建“门店小程序” 不用开发

“门店小程序”是啥?“门店小程序”是小程序的一项新能力.无需开发,商户就可在微信公众号后台快速创建“门店小程序”.这个小程序类似一张“店铺名片”,可以展示线下门店名称.简介.营业时间.联系方式.地理位置和图片等门店信息,并支持在公众号自定义菜单.图文消息和模板消息等场景中使用. 它长这样: (左侧为“门店小程序”示意图,将来商户可根据需要为门店小程序快速配置卡券.支付功能) “门店小程序”和你们平时用到的小程序不同点在于: 页面标准化——便于用户识别:指向性明确——是一个“门店”:创建简单——公

快速创建网站》 2.3 WordPress初始化和功能简介

本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 1. 网站管理平台WordPress和云计算平台Azure简介 (6分钟 本文) 2.1 在Azure上创建网站及网站运行机制 (13分钟) 2.2 域名绑定操作和Azure负载均衡机制 (12分钟) 2.3 WordPress 初始化和网站管理功能 (11分钟) 3.1 WordPress 数据导入 (12分钟) 3.2 WordPress 多站点支持和Azure在线代码编辑

《快速创建网站》 2.3 WordPress初始化和功能简介

本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 1. 网站管理平台WordPress和云计算平台Azure简介2.1 在Azure上创建网站及网站运行机制2.2 域名绑定操作和Azure负载均衡机制2.3 WordPress 初始化和网站管理功能3.1 WordPress 数据导入3.2 WordPress 多站点支持和Azure在线代码编辑器3.3 WordPress 多语言支持 Multisite Language Sw

协作半驻留式服务器程序开发框架 --- 基于 Postfix 服务器框架改造

一.概述 现在大家在和Java, PHP, .net写应用程序时,都会用到一些成熟的服务框架,所以开发效率是比较高的.而在用C/C++写服务器程序时,用的就五花八门了,有些人用ACE, 有些人用ICE(号称比ACE强许多),等等,这类服务器框架及库比较丰富,但入门门槛比较高,所以更多的人是自己直接写服务器程序,初始写时觉得比较简 单,可时间久了,便会觉得难以扩展,性能低,容易出错.其实,Postfix 作者为我们提供了一个高效.稳定.安全的服务器框架模型,虽然Postfix主要用作邮件系统的 m