美文网首页
(2)项目构建(Reactor部分)【Lars-基于C++负载均

(2)项目构建(Reactor部分)【Lars-基于C++负载均

作者: 刘丹冰Aceld | 来源:发表于2019-09-18 11:52 被阅读0次

    【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

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

    相关文章

      网友评论

          本文标题:(2)项目构建(Reactor部分)【Lars-基于C++负载均

          本文链接:https://www.haomeiwen.com/subject/ogwhuctx.html