# 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则�
没有合适的资源?快使用搜索试试~ 我知道了~
基于c语言的多线程高并发服务器.zip
共48个文件
h:21个
cc:18个
md:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 3 浏览量
2024-06-03
15:59:47
上传
评论
收藏 104KB ZIP 举报
温馨提示
基于c语言的多线程高并发服务器C++是一种广泛使用的编程语言,它是由Bjarne Stroustrup于1979年在新泽西州美利山贝尔实验室开始设计开发的。C++是C语言的扩展,旨在提供更强大的编程能力,包括面向对象编程和泛型编程的支持。C++支持数据封装、继承和多态等面向对象编程的特性和泛型编程的模板,以及丰富的标准库,提供了大量的数据结构和算法,极大地提高了开发效率。12 C++是一种静态类型的、编译式的、通用的、大小写敏感的编程语言,它综合了高级语言和低级语言的特点。C++的语法与C语言非常相似,但增加了许多面向对象编程的特性,如类、对象、封装、继承和多态等。这使得C++既保持了C语言的低级特性,如直接访问硬件的能力,又提供了高级语言的特性,如数据封装和代码重用。13 C++的应用领域非常广泛,包括但不限于教育、系统开发、游戏开发、嵌入式系统、工业和商业应用、科研和高性能计算等领域。在教育领域,C++因其结构化和面向对象的特性,常被选为计算机科学和工程专业的入门编程语言。在系统开发领域,C++因其高效性和灵活性,经常被作为开发语言。游戏开发领域中,C++由于其高效性和广泛应用,在开发高性能游戏和游戏引擎中扮演着重要角色。在嵌入式系统领域,C++的高效和灵活性使其成为理想选择。此外,C++还广泛应用于桌面应用、Web浏览器、操作系统、编译器、媒体应用程序、数据库引擎、医疗工程和机器人等领域。16 学习C++的关键是理解其核心概念和编程风格,而不是过于深入技术细节。C++支持多种编程风格,每种风格都能有效地保证运行时间效率和空间效率。因此,无论是初学者还是经验丰富的程序员,都可以通过C++来设计和实现新系统或维护旧系统。3
资源推荐
资源详情
资源评论
收起资源包目录
基于c语言的多线程高并发服务器.zip (48个子文件)
content
include
coreLog.h 2KB
resourceSQL.h 938B
Tree.h 4KB
networkHttpHeader.h 2KB
coreJson.h 2KB
coreTree.h 4KB
defineHead.h 346B
resourceFileCntl.h 199B
coreQueue.h 1KB
mescntl.h 405B
networkPthreadPool.h 2KB
processCookie.h 124B
coreDate.h 101B
processVerify.h 378B
coreStack.h 1KB
networkServer.h 576B
processWebAPI.h 493B
coreLink.h 5KB
coreMd5.h 535B
processMes.h 82B
coreIterator.h 1KB
lib
null 16B
src
coreQueue.cc 586B
resourceFileCntl.cc 1KB
coreDate.cc 912B
networkServer.cc 4KB
processMes.cc 11KB
coreTree.cc 14KB
resourceSQL.cc 3KB
processWebAPI.cc 1KB
coreIterator.cc 672B
processCookie.cc 580B
mescntl.cc 2KB
coreJson.cc 11KB
processVerify.cc 1KB
coreMd5.cc 4KB
coreStack.cc 585B
networkHttpHeader.cc 5KB
networkPthreadPool.cc 5KB
coreLink.cc 7KB
Log.md 2B
resource
此处放前端文件 1B
main.cpp 194B
bin
server.out 179KB
favicon.ico 4KB
index.html 656B
.gitignore 430B
README.md 16KB
共 48 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3916
- 资源: 7441
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功