C++服务开发入门指南
  • 序言
  • 前言
  • 一、一个简单的服务
    • 1 什么是服务
    • 2 服务可以用来做什么
    • 3 简单服务框架
  • 二、网络通信服务框架
    • 1 网络服务的基本概念
    • 2 增加监听端口
    • 3 处理客户端会话
    • 小结
  • 三、添加基础模块
    • 1 日志模块
    • 2 定时器
    • 3 事件机制
    • 4 线程池
    • 5 线程安全
    • 小结
  • 四、一个聊天服务
    • 1 需求描述及分析
    • 2 概要设计
    • 3 创建服务项目
    • 4 ClientUser实现
    • 5 RoomMgr实现
    • 6 ChatRoom实现
    • 7 RoomIDMgr实现
    • 小结
  • 五、测试、迭代及重构
    • 1 测试
    • 2 迭代
    • 3 重构
    • 4 版本号
  • 六、架构设计
    • 1 单点服务
    • 2 分布式服务
  • 七、部署及发布
    • 1 部署环境
    • 2 编译环境
    • 3 部署服务
    • 4 发布服务
  • 八、线上问题处理
    • 1 线上问题
    • 2 问题处理
  • 九、程序员的职业规划
    • 职业规划
Powered by GitBook
On this page
  • 1.1 服务是一个可执行程序
  • 1.2 服务是一个可长时间运行的程序
  • 1.3 服务对外部提供特定的价值输出
  1. 一、一个简单的服务

1 什么是服务

我们知道,C++代码可以通过编译,生成一个可执行的程序文件,可在windows上运行的,表现为一个exe文件;可以在linux上运行,则不需要后缀名。

1.1 服务是一个可执行程序

一个最简单的C++程序,是经典的“Hello world!”。

#include <iostream>

int main(){
    std::cout << "Hello world!";
    return 0;
}

这段代码,可以编译为一个可执行文件,其执行结果是在控制台上打印一行文字“Hello world!”。

服务首先是一个可执行程序,它可以在操作系统上运行,执行相应的任务。

那是不是所有的可执行程序都可以称为服务呢?如果不是的话,服务和普通的可执行程序有什么区别?

1.2 服务是一个可长时间运行的程序

上面的“Hello World!”程序,执行速度很快,如果是windows版本的exe程序,双击执行的话,可能只看到黑框一闪,连输出的内容都来不及看清楚。

服务一般可以长时间运行,我们对上面的程序进行简单修改。

#include <iostream>
#include <time.h>
#include <thread>
#include <chrono>

const int sec10 = 10000;

int main(){
    while(true){
        time_t now = time(nullptr);
        char* ct = ctime(&now);
        std::cout << "Hello world! time is " << ct << std::endl;
        std::this_thread::sleep_for(std::chrono::milliseconds(sec10));
    };

    return 0;
}

这个程序执行后,可以每隔10秒输出一次Hello world,并打印时间信息。

这已经有一个服务的雏形了,它可以定时向外输出时间信息,我们可以把定时输出时间信息,认为是一种对外的服务。

1.3 服务对外部提供特定的价值输出

上面的程序通过定时调用time函数,从系统中获取时间信息,并将其输出到控制台。这已经可以称为一个本地服务了。

我们可以很容易的将输出位置,改为一个文件。

#include <iostream>
#include <time.h>
#include <thread>
#include <chrono>

const int sec10 = 10000;

bool LogData(char* data){
    FILE *pf;
    std::string filePath = "test.log";
    pf = fopen( filePath.c_str(), "a");
    if (pf == nullptr)
    {
        return false;
    }

    fputs(data, pf);
    fclose(pf);
    return true;
}

void SayHello(){
    time_t now = time(nullptr);
    char* ct = ctime(&now);
    std::cout << "Hello world! time is " << ct << std::endl;
    LogData(ct);
}

int main(){
    while(true){
        SayHello();
        std::this_thread::sleep_for(std::chrono::milliseconds(sec10));
    };
    
    return 0;
}

如果增加了网络访问能力,可以将其改写为一个网络服务。

增加网络通信功能,可以改写为定时发送邮件的服务。

增加一个监听端口,响应客户端的请求,回复客户端当前服务器时间,就是一个简单的网络时间查询服务了。

综上所述,我们可以给服务一个定义:

服务是一个可以长时间运行的可执行程序,它通过处理输入信息,对外提供特定的价值输出。

当然,服务一般还具有以下特征:

  1. 可以在后台静默执行,不需要显示控制台或其他UI界面

  2. 可以注册到操作系统,由操作系统管理其启动、停止等行为

  3. 可以通过日志输出服务运行状态

  4. 可以接受用户请求,并给出符合预期的响应

后面的章节,我们将会逐步实现一个简单的服务框架

Previous一、一个简单的服务Next2 服务可以用来做什么

Last updated 2 years ago