集群聊天服务器项目【C++】(五)网络模块和业务模块

经过前面介绍相关的库和工具,比如Json、CMake、muduo等,我们可以开始编写本项目的代码了。

1.项目目录创建

一般一个项目由以下结构组成:
在这里插入图片描述

  1. bin文件夹存放:可执行程序
  2. build文件夹存放:编译过程中的临时文件
  3. include文件夹存放:头文件
  4. src文件夹存放:源代码
  5. test文件夹存放:测试用例,我们前面几章的测试代码就在这
  6. thirdparty文件夹存放:使用的别人的源代码,本项目使用了Json库
  7. CMakeLists.txt存放:CMake编译的文件夹,在 需要编译的目录都有一个
  8. autobuild.sh存放:编译的自动脚本
  9. README.md存放:项目的介绍,比如环境配置、编译、运行。

接下来介绍每一级目录的CMakeLists.txt文件的内容:

  1. 项目根目录下:
cmake_minimum_required(VERSION 3.0)
project(chat)

# 配置编译选项
set(CMAKE_CXX_FLAGS ${
   
   CMAKE_CXX_FLAGS} -g)

# 配置最终的可执行文件输出的路径
set(EXECUTABLE_OUTPUT_PATH ${
   
   PROJECT_SOURCE_DIR}/bin)

# 配置头文件的搜索路径
include_directories(${
   
   PROJECT_SOURCE_DIR}/include)
include_directories(${
   
   PROJECT_SOURCE_DIR}/include/server)
include_directories(${
   
   PROJECT_SOURCE_DIR}/thirdparty)

# 加载子目录
add_subdirectory(src)
  1. 在子目录src中:
add_subdirectory(server)  ##加载子目录
  1. 在server文件夹中:
#定义了一个SRC_LIST变量,包含了该目录下的所有源文件
aux_source_directory(. SRC_LIST)
 
# 指定生成可执行文件
add_executable(ChatServer ${
   
   SRC_LIST})
# 指定可执行文件链接时需要依赖的库文件
target_link_libraries(ChatServer muduo_net muduo_base pthread)

2.网络模块代码ChatServer

这部分代码和muduo库介绍相似:muduo库简单介绍,本次会更详细介绍。
这次把实现放到.cpp中,声明放到.hpp中。
先看整体代码:
在include/server/中编写chatserver.hpp:

#ifndef CHATSERVER_H
#define CHATSERVER_H

#include <muduo/net/TcpServer.h>
#include <muduo/net/EventLoop.h>
using namespace muduo;
using namespace muduo::net;

// 聊天服务器的主类
class ChatServer
{
   
   
public:
    // 初始化聊天服务器对象
    ChatServer(EventLoop *loop,
               const InetAddress &listenAddr,
               const string &nameArg);

    // 启动服务
    void start();

private:
    // 上报链接相关信息的回调函数
    void onConnection(const TcpConnectionPtr &);

    // 上报读写事件相关信息的回调函数
    void onMessage(const TcpConnectionPtr &,
                   Buffer *,
                   Timestamp);

    TcpServer _server; // 组合的muduo库,实现服务器功能的类对象
    EventLoop *_loop;  // 指向事件循环对象的指针
};

#endif

在/src/server/中实现chatserver.cpp

#include "chatserver.hpp"
#include "json.hpp"
#include "chatservice.hpp"

#include <iostream>
#include <functional>
#include <string>
using namespace std;
using namespace placeholders;
using json = nlohmann::json;

// 初始化聊天服务器对象
C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值