Skip to content
Update Home.md authored by LIU Hao's avatar LIU Hao
...@@ -4,7 +4,7 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端 ...@@ -4,7 +4,7 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端
本框架用 C++ 编写,大部分特性需要 C++11 支持。在编译器支持 GNU 扩展的情况下可以在 GNU++98 标准下编译(此情况不保证和 C++11 编译版本的二进制兼容性)。 本框架用 C++ 编写,大部分特性需要 C++11 支持。在编译器支持 GNU 扩展的情况下可以在 GNU++98 标准下编译(此情况不保证和 C++11 编译版本的二进制兼容性)。
##### 框架提供的线程 ## 框架提供的线程
1. 主线程 1. 主线程
只有一个,提供任务调度。用户业务主要由主线程完成。 只有一个,提供任务调度。用户业务主要由主线程完成。
...@@ -21,62 +21,148 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端 ...@@ -21,62 +21,148 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端
7. MongoDB 线程 7. MongoDB 线程
按需创建,为对称多线程机制,提供对 MongoDB 数据库的连接、查询等功能。 按需创建,为对称多线程机制,提供对 MongoDB 数据库的连接、查询等功能。
##### 支持的网络协议 ## 按功能分类的源代码目录结构
1. TCP(内置 SSL 支持)
1. CBPP(压缩的二进制协议,具有极小的 I/O 开销)
2. HTTP 1.1
3. WebSocket 13
2. UDP
##### 辅助功能
1. 通用 1. 系统服务
1. 基于 GNU++98 的 C++11 兼容层 1. 基于带索引的协程的任务队列 [[src/singletons/job_dispatcher.hpp]]
2. RAII 包装器(UniqueHandle) 2. 基于 RTTI 的事件通知机制
3. 可指向字符串字面量的零结尾字符串(SharedNts) 1. 抽象事件(基础组件) [[src/event_base.hpp]]
4. 基于 SharedNts 的异常 2. 事件分发器 [[src/singletons/event_dispatcher.hpp]]
5. SharedNts-std::string 字典 3. 可热加载的动态库管理器(不支持热卸载)
6. 64 位线性同余随机数发生器(LCRNG) 1. 配置文件加载器 [[src/module_config.hpp]]
7. 标准 errno 的查询和格式化 2. 静态初始化支持 [[src/module_raii.hpp]]
8. 常见字符串处理函数 3. 动态库管理器 [[src/singletons/module_depository.hpp]]
9. 支持多个索引的容器(对 boost::multi_index_container 的封装) 4. 支持 ANSI 颜色的跟踪日志系统 [[src/log.hpp]]
10. UTC 时间和本地时间获取及互转 5. 性能工具
11. UUID 1. 函数执行时间测量工具 [[src/profiler.hpp]]
12. 可变长度带符号和无符号的 64 位整数压缩及解压 2. 性能数据存储 [[src/singletons/profile_depository.hpp]]
13. 支持类型擦除的 shared_from_this 6. 定时器服务 [[src/singletons/timer_daemon.hpp]]
14. 基于块链和内存池的 StreamBuffer(内存缓冲器) 7. 主配置文件 [[src/singltons/main_config.hpp]]
15. 基于 StreamBuffer 的标准格式化流(std::istream, std::ostream, std::iostream) 8. 系统管理 HTTP 接口 [[src/singletons/system_http_server.hpp]]
16. 原子整数操作 2. 网络服务
17. 带进位检测的无符号整数运算 1. 地址
18. 小端序和大端序互转 1. IP 地址格式化和转换 [[src/ip_port.hpp]]
19. 无符号整数掩码操作 2. Socket 地址格式化和转换 [[src/sock_addr.hpp]]
2. 服务 3. DNS 查询服务 [[src/singletons/dns_daemon.hpp]]
1. 基于 RTTI 的事件通知机制 2. Socket(基础组件) [[src/socket_base.hpp]]
2. 可热加载的动态库管理器(不支持热卸载) 3. 基于 epoll 的网络调度服务 [[src/singletons/epoll_daemon.hpp]]
3. 支持 ANSI 颜色的日志系统 4. 抽象会话(基础组件) [[src/session_base.hpp]]
4. 函数执行时间测量工具 5. TCP
3. 协程 1. 会话(基础组件) [[src/tcp_session_base.hpp]]
1. 自定义协程和异步函数(用于封装异步调用) 2. SSL(基础组件)
2. 用于协程同步的 promise-future 1. RAII 包装器 [[src/ssl_raii.hpp]]
4. 线程 2. 加密解密器 [[src/ssl_filter_base.hpp]]
1. 线程 3. 连接器和接收器 [[src/ssl_factories.hpp]]
2. 线程级别互斥锁 3. 服务器(基础组件) [[src/tcp_server_base.hpp]]
3. 线程级别递归互斥锁 4. 客户端(基础组件) [[src/tcp_client_base.hpp]]
4. 线程级别条件变量 5. CBPP(压缩的二进制协议,具有极小的 I/O 开销)
5. 二进制数据处理 1. 协议特定异常 [[src/cbpp/exception.hpp]]
1. Base64 编码和解码 2. 编码器(基础组件) [[src/cbpp/writer.hpp]]
2. 十六进制编码和解码 3. 解码器(基础组件) [[src/cbpp/reader.hpp]]
3. 基于 zlib 的压缩和解压 4. 基本服务器会话(消息直接在网络线程处理,不和主线程交互) [[src/cbpp/low_level_session.hpp]]
6. 散列函数 5. 基本客户端会话(消息直接在网络线程处理,不和主线程交互) [[src/cbpp/low_level_client.hpp]]
1. 基于 std::ostream 的 CRC-32 计算器 6. 服务器会话(消息转发给主线程处理) [[src/cbpp/session.hpp]]
2. 基于 std::ostream 的 MD5 计算器 7. 客户端会话(消息转发给主线程处理) [[src/cbpp/client.hpp]]
3. 基于 std::ostream 的 SHA-1 计算器 8. 内置状态码 [[src/cbpp/status_codes.hpp]]
4. 基于 std::ostream 的 SHA-256 计算器 9. 抽象消息 [[src/cbpp/message_base.hpp]]
7. 序列化 10. 对象关系映射(ORM)生成器 [[src/cbpp/message_generator.hpp]]
1. 一种简单的、单一层次的配置文件解析 2. HTTP
2. CSV 格式文档解析和生成 1. 协议特定异常 [[src/http/exception.hpp]]
3. JSON 编码和解码 2. 服务器编码器(基础组件) [[src/http/server_writer.hpp]]
3. 服务器解码器(基础组件) [[src/http/server_reader.hpp]]
4. 客户端编码器(基础组件) [[src/http/client_writer.hpp]]
5. 客户端解码器(基础组件) [[src/http/client_reader.hpp]]
6. 基本服务器会话(消息直接在网络线程处理,不和主线程交互) [[src/http/low_level_session.hpp]]
7. 基本客户端会话(消息直接在网络线程处理,不和主线程交互) [[src/http/low_level_client.hpp]]
8. 服务器会话(消息转发给主线程处理) [[src/http/session.hpp]]
9. 客户端会话(消息转发给主线程处理) [[src/http/client.hpp]]
10. 谓词定义和格式化 [[src/http/verbs.hpp]]
11. 内置状态码 [[src/http/status_codes.hpp]]
12. 请求报头 [[src/http/request_headers.hpp]]
13. 响应报头 [[src/http/response_headers.hpp]]
14. 报头参数 [[src/http/header_option.hpp]]
15. 认证 [[src/http/authorization.hpp]]
16. urlencoded 编码解码器 [[src/http/urlencoded.hpp]]
17. multipart 编码解码器 [[src/http/multipart.hpp]]
18. URL 参数类型转换器 [[src/http/url_param.hpp]]
19. 升级的会话(基础组件) [[src/http/upgraded_session_base.hpp]]
3. WebSocket
1. 协议特定异常 [[src/websocket/exception.hpp]]
2. 编码器(基础组件) [[src/websocket/writer.hpp]]
3. 解码器(基础组件) [[src/websocket/reader.hpp]]
4. 基本服务器会话(消息直接在网络线程处理,不和主线程交互) [[src/websocket/low_level_session.hpp]]
5. 基本客户端会话(消息直接在网络线程处理,不和主线程交互) [[src/websocket/low_level_client.hpp]]
6. 服务器会话(消息转发给主线程处理) [[src/websocket/session.hpp]]
7. 客户端会话(消息转发给主线程处理) [[src/websocket/client.hpp]]
8. 内置状态码 [[src/websocket/status_codes.hpp]]
9. 消息操作码 [[src/websocket/opcodes.hpp]]
10. 基于 HTTP 的握手响应创建及校验 [[src/websocket/handshake.hpp]]
6. UDP
1. 服务器(基础组件) [[src/udp_server_base.hpp]]
3. 数据库服务
1. 文件系统服务 [[src/singletons/filesystem_daemon.hpp]]
2. MySQL
1. 数据库特定异常 [[src/mysql/exception.hpp]]
2. 数据对象基类 [[src/mysql/object_base.hpp]]
3. 对象关系映射(ORM)生成器 [[src/mysql/object_generator.hpp]]
4. 数据库连接 [[src/mysql/connection.hpp]]
5. 线程局部初始化器(基础组件) [[src/mysql/thread_context.hpp]]
6. SQL 格式化工具 [[src/mysql/formatting.hpp]]
7. 数据库服务 [[src/singletons/mysql_daemon.hpp]]
3. MongoDB
1. 数据库特定异常 [[src/mongodb/exception.hpp]]
2. 数据对象基类 [[src/mongodb/object_base.hpp]]
3. 对象关系映射(ORM)生成器 [[src/mongodb/object_generator.hpp]]
4. 数据库连接 [[src/mongodb/connection.hpp]]
5. BSON 编码器 [[src/mongodb/bson_builder.hpp]]
6. 数据库服务 [[src/singletons/mongodb_daemon.hpp]]
4. 协程
1. 自定义协程
1. 抽象协程(基础组件) [[src/job_base.hpp]]
2. 简单异步函数 [[src/async_job.hpp]]
2. 用于协程同步的 promise-future [[src/job_promise.hpp]]
5. 线程
1. 自定义线程 [[src/thread.hpp]]
2. 线程级别互斥锁 [[src/mutex.hpp]]
3. 线程级别条件变量 [[src/condition_variable.hpp]]
4. 线程级别递归互斥锁 [[src/recursive_mutex.hpp]]
6. 二进制数据处理
1. Base64 编码解码器 [[src/base64.hpp]]
2. 十六进制编码解码器 [[src/hex.hpp]]
3. 基于 zlib 的压缩解压器 [[src/zlib.hpp]]
7. 散列函数
1. 基于 std::ostream 的 CRC-32 计算器 [[src/crc32.hpp]]
2. 基于 std::ostream 的 MD5 计算器 [[src/md5.hpp]]
3. 基于 std::ostream 的 SHA-1 计算器 [[src/sha1.hpp]]
4. 基于 std::ostream 的 SHA-256 计算器 [[src/sha256.hpp]]
8. 序列化
1. 一种简单的、单一层次的配置文件解码器 [[src/config_file.hpp]]
2. CSV 格式文档编码解码器 [[src/csv_document.hpp]]
3. JSON 编码解码器 [[src/json.hpp]]
9. 辅助功能
1. 基于 GNU++98 的 C++11 兼容层 [[src/cxx_ver.hpp]]
2. C++ 语言实用工具 [[src/cxx_util.hpp]]
3. RAII 包装器 [[src/raii.hpp]]
4. 支持所有权擦除的零结尾字符串(SharedNts) [[src/shared_nts.hpp]]
5. 基于 SharedNts 的异常
1. 基础异常 [[src/exception.hpp]]
2. 协议异常 [[src/protocol_exception.hpp]]
3. 系统异常(封装 errno 查询) [[src/system_exception.hpp]]
6. SharedNts-std::string 字典 [[src/optional_map.hpp]]
7. 64 位线性同余随机数发生器(LCRNG) [[src/random.hpp]]
8. 标准 errno 的查询和格式化 [[src/errno.hpp]]
9. 常见字符串处理函数 [[src/string.hpp]]
10. 基于 boost::multi_index_container 的支持多个索引的容器 [[src/multi_index_map.hpp]]
11. 日期时间格式化和解析 [[src/time.hpp]]
12. UUID [[src/uuid.hpp]]
13. 可变长度带符号和无符号的 64 位整数压缩及解压 [[src/vint64.hpp]]
14. 支持类型擦除的 enable_shared_from_this [[src/virtual_shared_from_this.hpp]]
15. 基于块链和内存池的内存缓冲器(StreamBuffer) [[src/stream_buffer.hpp]]
16. 基于 std::(i|o|io)stream 和 StreamBuffer 的标准格式化流 [[src/buffer_streams.hpp]]
17. 原子整数操作 [[src/atomic.hpp]]
18. 带进位检测的无符号整数运算 [[src/checked_arithmetic.hpp]]
19. 小端序和大端序互转 [[src/endian.hpp]]
20. 无符号整数掩码操作 [[src/flags.hpp]]
## 源码目录结构 ## 源码目录结构
...@@ -101,5 +187,3 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端 ...@@ -101,5 +187,3 @@ Poseidon 是一个单进程、不对称多线程、多协程的游戏服务端
+--[#] run_server.sh 在工作目录中启动程序的脚本 +--[#] run_server.sh 在工作目录中启动程序的脚本
+--[#] makedeb.sh 制作 Debian 安装包的脚本 +--[#] makedeb.sh 制作 Debian 安装包的脚本
``` ```
## 按功能分类的源代码目录结构