一个erlang游戏服务端框架。
使用cowboy实现http服务。
Module | Desc |
---|---|
gateway_server.erl | 启动cowboy并维护登录token |
gateway_handler.erl | 处理登录的http请求 |
game_server_manager.erl | 感知并管理游戏服务器 |
- tcp通信直接采用ranch
- 简单协议结构:| Length | ProtoId | Binary |, 协议内容部分使用protobuf
- 以下是部分模块说明
Module | Desc |
---|---|
lib_proto.erl | 负责协议的打包解包 |
lib_serialize.erl | 序列化与反序列化 |
net_listener.erl | 启动ranch进程端口监听 |
gateway_connector.erl | 连接gateway的模块 |
- 采用mysql-otp
- 进程池使用poolboy
- db.erl 进行数据库相关的操作
-record(player, {
player_id = 0,
socket,
transport,
base_data = #{}, %% 全量保存的key-value数据
kv_data = #{}, %% 增量保存的key-value数据
change_k_set = sets:new()
}).
- 每个client接入,都会启动一个与之对应的player,在其中进行数据的接收与返回
- kv_data中的key-value数据都会以binary的形式回存数据库,并实行增量保存(player_base.erl)
- base_data中的的key-value数据都会以binary的形式回存数据库,并实行全量保存(player_kv.erl)
- #player{}中的数据每5分钟进行一次回存数据库
-behaviour(base_module).
加载到player的数据需要实现的behaviour
- from_db/1 从db加载数据
- to_db/1 回存内存数据到db
- get/3 获取对应模块的数据
- put/3 存储对应模块的数据
可参考player_kv.erl、player_base.erl
Module | Desc |
---|---|
player_init.erl | 客户端登录成功后,进行player初始化的模块 |
handler_router.erl | 该模块会根据协议号(ProtoId)选择对应的hander |
global_id_manger.erl | 负责生成全局唯一id |
client.erl | 模拟客户端 |
make_proto.py | 生成erl对应./make_proto/proto中的协议文件 |