# co_kimserver **Repository Path**: sylar_game_dev/co_kimserver ## Basic Information - **Project Name**: co_kimserver - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-22 - **Last Updated**: 2021-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # co_kimserver > 【注意】 项目尚未完成,请谨慎使用! --- ## 1. 简述 `co_kimserver` 是高性能 TCP 网络通信框架。 * 多进程工作模式(manager/workers)。 * 基于腾讯开源的轻量级协程库 [libco](https://github.com/Tencent/libco)。 * 主要使用 C/C++11 语言开发。 * 支持 tcp 协议。 * 使用 protobuf 封装通信协议。 * 支持访问 mysql, redis (client: hiredis)。 * 通过 zookeeper 管理服务节点,支持分布式微服务部署。 --- ## 2. 运行环境 项目支持 Linux 平台。源码依赖第三方库: * mysqlclient * protobuf3 * hiredis * crypto++ * zookeeper_mt ([安装 zookeeper-client-c](https://wenfh2020.com/2020/10/17/zookeeper-c-client/)) >【注意】libco 不兼容 jemalloc / tcmalloc,出现死锁。 --- ## 3. 架构 单节点多进程工作模式,支持多节点分布式部署。 --- ### 3.1. 单节点 * manager 父进程:负责子进程管理调度,外部连接初始接入。 * worker 子进程:负责客户端详细连接逻辑。 * module 动态库:业务源码实现。(参考:[co_kimserver/src/modules/](https://github.com/wenfh2020/co_kimserver/tree/main/src/modules))
--- ### 3.2. 多节点 服务节点通过 `zookeeper` 发现其它节点。(下图是客户端与服务端多节点建立通信流程。)
--- ## 4. 测试 4核 8G 虚拟机,本地压测:客户端与**单进程**服务网络通信,100w 条数据(10000 个用户,每个用户发 100 个包)。 * 压测命令。 客户端([测试源码](https://github.com/wenfh2020/co_kimserver/tree/main/src/test/test_tcp_pressure)),服务端([测试源码](https://github.com/wenfh2020/co_kimserver/blob/main/src/modules/module_test/module_test.cpp))。 ```shell # ./test_tcp_pressure [host] [port] [protocol(1001/1003/1005)] [users] [user_packets] ``` * 压测数据。 | 测试功能 | 数据量 | 并发 | 协议号 | 压测命令 | | :------- | :----- | :---------- | :----- | :------------------------------------------------ | | 普通协议 | 100w | 200,000 / s | 1001 | ./test_tcp_pressure 127.0.0.1 3355 1001 10000 100 | --- ## 5. 服务配置 ```shell ./bin/config.json ``` ```shell { "server_name": "kim-gate", # 服务器名称。 "worker_cnt": 1, # 子进程个数。(服务是多进程工作模式,类似 nginx。) "node_type": "gate", # 节点类型(gate/logic/...)。用户可以根据需要,自定义节点类型。 "node_host": "127.0.0.1", # 服务集群内部节点通信 host。 "node_port": 3344, # 服务集群内部节点通信 端口。 "gate_host": "127.0.0.1", # 服务对外开放 host。(对外部客户端或者第三方服务。不对外服务可以删除该选项。) "gate_port": 3355, # 服务对外开放端口。(不对外服务可以删除该选项。) "gate_codec": "protobuf", # 服务对外协议类型。目前暂时支持协议类型:protobuf。 "keep_alive": 30, # 服务对外连接保活有效时间。 "log_path": "kimserver.log", # 日志文件。 "log_level": "info", # 日志等级。(trace/debug/warn/info/notice/error/alert/crit) "max_clients": 10000, # 最大支持用户数量。 "is_reuseport": false, # 支持 so_reuseport 选项。 "modules": [ # 业务功能插件,动态库数组。 "module_test.so" ], "redis": { # redis 连接池配置,支持配置多个。 "test": { # redis 配置节点,支持配置多个。 "host": "127.0.0.1", # redis 连接 host。 "port": 6379, # redis 连接 port。 "max_conn_cnt": 3 # redis 连接池最大连接数。 } }, "database": { # mysql 数据库连接池配置。 "slowlog_log_slower_than": 300, # mysql 执行 sql 命令,超过指定时间(单位:毫秒),打印慢日志。 "nodes": { # mysql 连接池连接节点。 "test": { # mysql 数据库配置节点,支持配置多个。 "host": "127.0.0.1", # mysql host。 "port": 3306, # mysql port。 "user": "root", # mysql 用户名。 "password": "root123!@#", # mysql 密码。 "charset": "utf8mb4", # mysql 字符集。 "max_conn_cnt": 10 # mysql 连接池最大连接数。 } } }, "zookeeper": { # zookeeper 中心节点管理配置,用于节点发现,节点负载等功能。 "servers": "127.0.0.1:2181", # zookeeper 服务配置。 "log_path": "zk.log", # zookeeper-client-c 日志。 "log_level": "debug", # zookeeper-client-c 日志等级。(debug/warn/info/error) "root": "/kimserver", # 节点发现根目录,保存了各个节点信息,每个节点启动需要往这个目录注册节点信息。 "watch_node_type": [ # 当前节点关注其它节点类型("node_type"),用于节点相互通信。 "gate", # 接入节点类型。(用户可在配置自定义 "node_type") "logic" # 逻辑节点类型。(用户可在配置自定义 "node_type") ] } } ``` --- ## 6. 编译运行 ```shell cd ./co_kimserver chmod +x run.sh ./run.sh all ```