# FlyServerEngine
FlyServerEngine是基于Linux操作系统下由C语言编写的服务器引擎,该引擎由四个层次组成:
| 层次 | 说明 |
| -------------- | ------------------------------------------------- |
| Process Layer | 处理层 数据的识别,处理与输出等数据加工接口 |
| Network Layer | 网络层 基础的网络协议与网络数据传输等网络相关接口 |
| Resource Layer | 资源层 相关文件操作和数据库操作等资源相关接口 |
| Core Layer | 核心层 基础的数据结构和数学函数等基础函数接口 |
以上四个层次由低至高为 Core Layer -> Resource Layer -> Network Layer -> Process Layer,应基于"高层能调用低层的接口,而低层无法调用高层的接口"的原则来构建该引擎
用户应使用Linux操作系统运行以下代码(已用makefile文件集合),以在bin文件夹输出server.out可执行文件
```shell
make
```
makefile 文件
```shell
.PHONY: clear
all: ./src/coreLink.o ./src/coreTree.o ./src/coreJson.o ./src/coreMd5.o ./src/corePthreadPool.o ./src/resourceSQL.o ./src/networkServer.o ./src/networkHttpHeader.o main.o
g++ -g ./src/coreLink.o ./src/coreTree.o ./src/coreJson.o ./src/coreMd5.o ./src/corePthreadPool.o ./src/resourceSQL.o ./src/networkServer.o ./src/networkHttpHeader.o main.o -o ./bin/server.out -lpthread -lmysqlclient
./src/coreLink.o: ./src/coreLink.cc
g++ -g -I./include -c ./src/coreLink.cc -o ./src/coreLink.o
./src/coreTree.o: ./src/coreTree.cc
g++ -g -I./include -c ./src/coreTree.cc -o ./src/coreTree.o
./src/coreJson.o: ./src/coreJson.cc
g++ -g -I./include -c ./src/coreJson.cc -o ./src/coreJson.o
./src/coreMd5.o: ./src/coreMd5.cc
g++ -g -I./include -c ./src/coreMd5.cc -o ./src/coreMd5.o
./src/corePthreadPool.o: ./src/corePthreadPool.cc
g++ -g -I./include -c ./src/corePthreadPool.cc -o ./src/corePthreadPool.o
./src/resourceSQL.o: ./src/resourceSQL.cc
g++ -g -I./include -c ./src/resourceSQL.cc -o ./src/resourceSQL.o
./src/networkServer.o: ./src/networkServer.cc
g++ -g -I./include -c ./src/networkServer.cc -o ./src/networkServer.o
./src/networkHttpHeader.o: ./src/networkHttpHeader.cc
g++ -g -I./include -c ./src/networkHttpHeader.cc -o ./src/networkHttpHeader.o
main.o: main.cpp
g++ -g -I./include -c main.cpp -o main.o
clear:
rm ./src/*.o main.o
```
**用户应仅在Procss Layer层改写并加入数据加工的具体代码以达到数据的自定义加工,越低层的代码可修改性越差**
以下是各层基本函数接口,相关数据结构和相关说明:
## Process Layer 处理层
------
**该层在main.cpp文件中**
未实现:文件权限管理\
### processMes 信息加工与回复
int processMes(int fd);
对文件描述符fd中的信息加工并回复
## Network Layer 网络层
------
未实现:http头读写(可以优化HttpHeader_fd_init())
### Srever 网络监听和多线程调用
**server_start**
void server_start(const short unsigned int PORT, const char *IP, const unsigned int PTHREAD_MAX, const unsigned int EPOLL_SIZE, int (*processMes)(int fd));
新建一个在IP:PORT上的监听,其中使用了线程池(PTHREAD_MAX为线程个数)和EPOLL(EPOLL_SIZE为EPOLL最大监听个数)
### HttpHeader Http协议头的创建与读取
**数据结构**
```c
typedef struct requestHeaderValue {
char *n_header;
char *n_value;
} requestHeaderValue;
typedef struct HttpHeader {
char *n_requestLine;
Tree *n_requestHeader;
} HttpHeader;
```
**requestHeaderValue_init**
requestHeaderValue *requestHeaderValue_init(char *header, char *value);
创建相应的一条消息头,失败返回NULL
**requestHeaderValue_print**
void requestHeaderValue_print(requestHeaderValue *rhv);
输出消息头内容
**requestHeaderValue_free**
void requestHeaderValue_free(requestHeaderValue *rhv);
释放消息头结构
**HttpHeader_init**
HttpHeader *HttpHeader_init();
创建一个空的http协议结构,失败返回NULL
**HttpHeader_fd_init**
HttpHeader *HttpHeader_fd_init(int fd);
根据一个文件描述符创建相应的http结构,失败返回NULL
**HttpHeader_insertRequestHeader**
int HttpHeader_insertRequestHeader(HttpHeader *hh, requestHeaderValue *rhv);
插入新的消息头结构,成功返回0.失败返回-1
**HttpHeader_print**
void HttpHeader_print(HttpHeader *hh);
输出一个http协议结构
**HttpHeader_free**
void HttpHeader_free(HttpHeader *hh);
释放一个http协议结构
## Resource Layer 资源层
------
未实现:文件创建和删除返回文件描述符\文件大小格式等属性的获取\文件描述符的读写\分段文件管理
### SQL MYSQL数据库操作
**MYSQL_init**
MYSQL *MYSQL_init(const char *HOST, const char *USERNAME, const char *PASSWORD, const char *DATABASE, unsigned int timeout);
创建一个相应的MYSQL
**exeSql**
void exeSql(MYSQL *sqlConnection, const char *sql, int fd);
在sqlConnection所对应的数据库中执行sql语言并将其输出到fd中
MYSQL_free
void MYSQL_free(MYSQL *sqlConnection);
释放sqlConnection
## Core Layer 核心层
------
未实现:日志输出(调试日志和系统日志)\字符串类型\开根号\日期\图\哈希表\循环队列\红黑树\hashMap
### Link 链表
**数据结构**
```c
// 链表节点
typedef struct LinkNode {
void *n_value; //节点值
struct LinkNode *n_next; //next节点
} LinkNode;
// 链表
typedef struct Link {
int n_linkNodeNum; //链表节点数
LinkNode *n_head; //头节点
LinkNode *n_tail; //头节点
} Link;
```
**LinkNode_init**
LinkNode *LinkNode_init(void *value);
将value作为n_value创建新的LinkNode,成功返回新建的LinkNode,失败返回NULL
**LinkNode_print**
void LinkNode_print(LinkNode *ln, void (*fun_printValue)(void *));
以fun_printValue函数方法输出ln的n_value值
**LinkNode_free**
void LinkNode_free(LinkNode *ln, void (*fun_freeValue)(void *));
以fun_freeValue的方式释放ln的n_value 并 释放LinkNode
**Link_init**
Link *Link_init();
创建新的Link,成功返回新建的Link,失败返回NULL
**Link_disPlayNode**
void Link_disPlayNode(Link *l, void (*fun_printValue)(void *));
遍历Link的Node,并以fun_printValue的方法输出各个Node的n_value值
**Link_getLength**
int Link_getLength(Link *l);
返回Link的n_linkNodeNum值,如果l为NULL则返回-1
**Link_queryValue**
int Link_queryValue(Link *l, void *value, int (*fun_compareValue)(void *, void *));
以fun_compareValue方法比较value值是否一致以查询l里是否存在value值,成功则返回该节点所在数,失败则返回0,如果l为NULL则返回-1
**Link_insertNode**
int Link_insertNode(Link *l, int nodeNum, LinkNode *newln);
将newln插入到l的第nodeNum个节点处(从0开始),成功返回1,失败返回0,如果l为NULL则返回-1
**Link_insertValue**
int Link_insertValue(Link *l, int nodeNum, void *value);
新建一个值为value的newln插入到l的第nodeNum个节点处(从0开始),成功返回1,失败返回0,如果l为NULL则返回-1
**Link_headInsertNode**
int Link_headInsertNode(Link *l, LinkNode *newln);
将ln插入l的头节点,成功返回1,失败返回0,如果l或newln为NULL则返回-1(失败的唯一方法为l或newln为NULL)
**Link_headInsertValue**
int Link_headInsertValue(Link *l, void *value);
新建一个值为value的ln插入l的头节点,成功返回1,失败返回0,如果l或newln为NULL则�
生瓜蛋子
- 粉丝: 3926
- 资源: 7441
最新资源
- 机械设计硅钢片自动压装熔接机stp全套设计资料100%好用.zip.zip
- 基于springboot的人才公寓管理系统源码(java毕业设计完整源码).zip
- 基于springboot的亿时网上书店系统源码(java毕业设计完整源码).zip
- 基于springboot的仁和机构的体检预约系统的设计与实现源码(java毕业设计完整源码).zip
- 机械设计桁架自动化定子上下料设备sw16可编辑全套设计资料100%好用.zip.zip
- 基于springboot的仓库管理系统源码(java毕业设计完整源码).zip
- 基于springboot的付费自习室管理系统源码(java毕业设计完整源码).zip
- 机械设计混凝土搅拌站砖厂用砂筛机带式输送机sw20可编辑全套设计资料100%好用.zip.zip
- 基于springboot的企业员工薪酬管理系统源码(java毕业设计完整源码).zip
- 基于springboot的企业客源关系管理系统的设计与实现源码(java毕业设计完整源码).zip
- 基于springboot的企业档案管理信息系统的设计与实现源码(java毕业设计完整源码+LW).zip
- 基于springboot的候鸟监测数据管理系统源码(java毕业设计完整源码).zip
- 基于springboot的公寓出租系统的设计与实现源码(java毕业设计完整源码).zip
- 机械设计环形光学胶检测机sw21全套设计资料100%好用.zip.zip
- 机械设计货车底板支架焊接线sw16可编辑全套设计资料100%好用.zip.zip
- 基于springboot的兰州市出租车服务管理系统源码(java毕业设计完整源码).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈