模块划分

合理编写模块的 demo.h、demo.cc

下例为C++为后端服务编写的探活检测服务

  • health_server.h
#ifndef  HEALTH_SERVER_H
#define HEALTH_SERVER_H
#include <iostream>
//#include "utils/flags.h"
void health_server( const std::string &health_host , const std::string &health_port );
#endif
  1. 必加#ifndef: 预处理功能(宏定义,文件包含和条件编译)中的条件编译,主要用来防止重复编译,“multiple define”错误
  2. .h中的其它预处理功能include***,遵循最小使用原则,如上例 仅使用std::string,则对应 仅加入#include<iostream>
  3. .cc文件也需要添加 对应#include "health_server.h" 文件

    health_server.cc
#include <dirent.h>
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h> #include <atomic>
#include <memory>
#include <thread>
#include <iostream>
#include "health_server.h"
#include "./http_server.h" mg_serve_http_opts oppo::HttpServer::s_server_option;
std::atomic<bool> server_stop(true);
std::unordered_map<std::string, oppo::ReqHandler> oppo::HttpServer::s_handler_map;
std::unordered_set<mg_connection *> oppo::HttpServer::s_websocket_session_set; static bool HandleHealth(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (!server_stop)
rsp_callback(c, "OK");
else
rsp_callback(c, "STOP"); return true;
} static bool HandleStop(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (!server_stop) {
server_stop = true;
rsp_callback(c, "STOP OK");
}
else {
rsp_callback(c, "IS STOP");
} return true;
} static bool HandleStart(std::string url, std::string body,
mg_connection *c, oppo::OnRspCallback rsp_callback)
{
if (server_stop) {
server_stop = false;
rsp_callback(c, "START OK");
}
else {
rsp_callback(c, "IS START");
} return true;
} void health_server( const std::string &health_host , const std::string &health_port ){
std::string health_address(health_host + ":" + health_port);
auto health_server = std::unique_ptr<oppo::HttpServer>(new oppo::HttpServer);
std::thread http_thread([&health_server, health_address]() {
health_server->Init(health_address);
health_server->AddHandler("/asr/health", HandleHealth);
health_server->AddHandler("/asr/stop", HandleStop);
health_server->AddHandler("/asr/start", HandleStart);
health_server->Start();
});
http_thread.join();
}

依赖库部分:

  • gflags使用DEFINE_int32(port, 10086, "grpc listening port")
#include <memory>
#include <gflags/gflags.h>
DEFINE_int32(port, 10086, "grpc listening port");
  • atomic:原子变量,一般在多线程作为锁使用 依赖:#include <atomic>

ERROR

  • 未定义的引用
  • 命令行编写:g++ speech-service-main.cc http_server.cc mongoose.cc -lpthread,严格按照依赖顺序写,-l链接动态库
  • CMakeList.txt:
  add_library(health_server STATIC
http/health_server.cc
http/http_server.cc
http/mongoose.cc
)
target_link_libraries(health_server PUBLIC pthread) add_executable(grpc_server_main bin/grpc_server_main.cc)
target_link_libraries(grpc_server_main PUBLIC health_server)

最新文章

  1. 以.net core重构原有.net framework过程中的一些API变更记录(持续更新)
  2. Halcon 10.0 Sample:完整性检查(圆形)
  3. Nginx 配置详解
  4. Struts2的处理结果(一)——处理结果的配置
  5. PHP PDO 简单登陆操作
  6. mysql select简单用法
  7. Android开发:怎样定制界面风格
  8. Jquery插件之ajaxForm ajaxSubmit的理解用法(转)
  9. 酷伯伯实时免费HTTP代理ip爬取(端口图片显示+document.write)
  10. Swift:消除Null值
  11. Java使用Aspose组件进行多文档间的转换操作
  12. SUSE12Sp3-kafka安装
  13. python之cookie, cookiejar 模拟登录绕过验证
  14. TerminateProcess实现关闭任意程序
  15. JavaScript基础视频教程总结(091-100章)
  16. 基于 HTML5 Canvas 的 3D WebGL 机房创建
  17. 终于解决“Git Windows客户端保存用户名与密码”的问题(转载)
  18. webuploader.js
  19. President&#39;s Office
  20. 贪心算法HURUST题目

热门文章

  1. 本地使用 Docker Compose 与 Nestjs 快速构建基于 Dapr 的 Redis 发布/订阅分布式应用
  2. Java中运算符和方法的区别
  3. day09 集合排序_Collection接口与Collections工具类
  4. 聊聊 Redis 是如何进行请求处理
  5. C++封装静态链接库和使用
  6. 推荐几款最好用的MySQL开源客户端,建议收藏!
  7. Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。
  8. Flutter 开启 Windows、macOS 平台支持的命令
  9. JavaScript基础回顾知识点记录1
  10. Python小游戏——外星人入侵(保姆级教程)第一章 07调整飞船速度 08限制飞船活动范围