(2)项目构建(Reactor部分)【Lars-基于C++负载均衡远程服务器调度系统教程】

【Lars教程目录】

Lars源代码
https://github.com/aceld/Lars


【Lars系统概述】
第1章-概述
第2章-项目目录构建


【Lars系统之Reactor模型服务器框架模块】
第1章-项目结构与V0.1雏形
第2章-内存管理与Buffer封装
第3章-事件触发EventLoop
第4章-链接与消息封装
第5章-Client客户端模型
第6章-连接管理及限制
第7章-消息业务路由分发机制
第8章-链接创建/销毁Hook机制
第9章-消息任务队列与线程池
第10章-配置文件读写功能
第11章-udp服务与客户端
第12章-数据传输协议protocol buffer
第13章-QPS性能测试
第14章-异步消息任务机制
第15章-链接属性设置功能


【Lars系统之DNSService模块】
第1章-Lars-dns简介
第2章-数据库创建
第3章-项目目录结构及环境构建
第4章-Route结构的定义
第5章-获取Route信息
第6章-Route订阅模式
第7章-Backend Thread实时监控


【Lars系统之Report Service模块】
第1章-项目概述-数据表及proto3协议定义
第2章-获取report上报数据
第3章-存储线程池及消息队列


【Lars系统之LoadBalance Agent模块】
第1章-项目概述及构建
第2章-主模块业务结构搭建
第3章-Report与Dns Client设计与实现
第4章-负载均衡模块基础设计
第5章-负载均衡获取Host主机信息API
第6章-负载均衡上报Host主机信息API
第7章-过期窗口清理与过载超时(V0.5)
第8章-定期拉取最新路由信息(V0.6)
第9章-负载均衡获取Route信息API(0.7)
第10章-API初始化接口(V0.8)
第11章-Lars Agent性能测试工具
第12章- Lars启动工具脚本


二、项目目录构建

​ 首先在一切开始之前,我们应该将最基本的项目架构创建出来。

1)创建Lars代码总目录

$cd ~/
$mkdir Lars
  1. 创建一个模块Lars_reactor

lars_reactor是一个网络IO库,是我们要实现的,我们就先以它作为第一个子项目进行构建。

$mkdir lars_reactor

然后在lars_reactor模块下创建一系列文件,如下

.
├── example
│   └── testlib
│       ├── hello_lars.cpp
│       └── Makefile
├── include
│   └── tcp_server.h
├── lib
├── Makefile
└── src
    └── tcp_server.cpp

3)代码编写

src/tcp_server.c

#include <iostream>

void lars_hello() 
{
    std::cout <<"lars hello" <<std::endl; 
}

src/tcp_server.h

#pragma once

void lars_hello();

​ 我们要生成一个lib库文件liblreactor.a,来提供一些reactor模块的API接口。

生成liblreactor.a的Makefile如下

lars_reactor/Makefile

TARGET=lib/liblreactor.a
CXX=g++
CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated

SRC=./src

INC=-I./include
OBJS = $(addsuffix .o, $(basename $(wildcard $(SRC)/*.cpp)))

$(TARGET): $(OBJS)
        mkdir -p lib
        ar cqs $@ $^

%.o: %.cpp
        $(CXX) $(CFLAGS) -c -o $@ $< $(INC)

.PHONY: clean

clean:
        -rm -f src/*.o $(TARGET)

4)编译

$cd lars/lars_reactor/
$make
$g++ -g -O2 -Wall -fPIC -Wno-deprecated -c -o src/tcp_server.o src/tcp_server.cpp -I./include
mkdir -p lib
ar cqs lib/liblreactor.a src/tcp_server.o

我们会在lib下得到一个liblreactor.a库文件。

5)调用liblreactor.a接口

$cd lars/lars_reactor/
$mkdir example/testlib -p
$cd example/testlib/

hello_lars.cpp

#include "tcp_server.h"

int main() {

    lars_hello();

    return 0;
}

Makefile

CXX=g++
CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated 

INC=-I../../include
LIB=-L../../lib -llreactor 
OBJS = $(addsuffix .o, $(basename $(wildcard *.cc)))

all:
        $(CXX) -o hello_lars $(CFLAGS)  hello_lars.cpp $(INC) $(LIB)

clean:
        -rm -f *.o hello_lars

编译

$ make
g++ -o hello_lars -g -O2 -Wall -fPIC -Wno-deprecated   hello_lars.cpp -I../../include -L../../lib -llreactor 

执行

$ ./hello_lars 
lars hello

我们现在一个基本的项目目录就构建好了,大致如下

Lars/
├── lars_reactor
│   ├── example
│   │   └── testlib
│   │       ├── hello_lars
│   │       ├── hello_lars.cpp
│   │       └── Makefile
│   ├── include
│   │   └── tcp_server.h
│   ├── lib
│   │   └── liblreactor.a
│   ├── Makefile
│   └── src
│       ├── tcp_server.cpp
│       └── tcp_server.o
└── README.md

关于作者:

作者:Aceld(刘丹冰)

mail: danbing.at@gmail.com
github: https://github.com/aceld
原创书籍gitbook: http://legacy.gitbook.com/@aceld

原创声明:未经作者允许请勿转载, 如果转载请注明出处

推荐阅读更多精彩内容