io多路复用
概念:用一个线程管理多个socket就是io多路复用。一个线程就可以处理多个socket/io。
io多路复用技术,select poll epoll 数据库一般使用select因为select可以支持跨平台。而epoll则不行。
epoll封装reactor
epoll的几个函数功能介绍:
创建epoll epoll_creat
删除
增加socket epoll_
移除socket
检测socket事件 epoll_wait
标记socket 相关信息的结构体。
socketitem
线程池的设计
执行队列:
任务队列:
管理组件:
封装API: 接口设计1.初始化 2.增减线程 3.
消息队列
linux下使用protobuf 具体步骤
1. 安装protobuf
在Linux上安装protobuf,可以使用以下命令:
```
sudo apt-get install protobuf-compiler
```
2. 编写.proto文件
在使用protobuf之前,需要先编写.proto文件。这是一种用于定义数据结构的语言,类似于XML和JSON。以下是一个简单的.proto文件示例:
```
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
```
3. 编译.proto文件
使用protobuf编译器将.proto文件编译成可执行文件。以下是一个示例命令:
```
protoc --cpp_out=. person.proto
```
这将生成一个名为person.pb.cc的C++文件和一个名为person.pb.h的头文件。
4. 编写代码
在编写代码之前,需要将protobuf库添加到项目中。以下是一个示例命令:
```
g++ -std=c++11 -I/usr/local/include -L/usr/local/lib -lprotobuf mycode.cpp person.pb.cc -o mycode
```
然后,可以使用protobuf库中的类来序列化和反序列化数据。以下是一个示例代码:
```
#include <iostream>
#include <fstream>
#include "person.pb.h"
using namespace std;
int main() {
Person person;
person.set_name("John Doe");
person.set_age(30);
person.set_email("johndoe@example.com");
fstream output("person.pb", ios::out | ios::binary);
person.SerializeToOstream(&output);
output.close();
fstream input("person.pb", ios::in | ios::binary);
Person new_person;
new_person.ParseFromIstream(&input);
input.close();
cout << "Name: " << new_person.name() << endl;
cout << "Age: " << new_person.age() << endl;
cout << "Email: " << new_person.email() << endl;
return 0;
}
```
5. 编译代码
使用以下命令编译代码:
```
g++ -std=c++11 -I/usr/local/include -L/usr/local/lib -lprotobuf mycode.cpp person.pb.cc -o mycode
```
6. 运行代码
使用以下命令运行代码:
```
./mycode
```
这将输出以下内容:
```
Name: John Doe
Age: 30
Email: johndoe@example.com
```
C++中的结构体 与类的区别
在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有。注意,C++中的结构体是可以有析构函数和构造函数,而C则不允许。而共用体,它是不可能有析构函数和构造函数的。结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。即它是一种内存覆盖,也就是说,同一块内存在不同的时刻存储不同的值(可以是不同的类型)。
读取配置
协议的创建+协议注册(消息的订阅)
1 .lua 修改/添加协议内容 工具生成到文件___Msg.h ./command
2 注册协议 在./Common CmdInfoCheck.cpp
DEfRegCmdLua(RQ_PETEQUIP_RECASTCMD,rqPet___,TOSESSION);
3 接收消息
4 发送消息
Cmd::rt____ cmd;
ower_->sendCmdToMe(cmd);