echecs是一款个人基于obEspoir框架开发的多人自定义麻将,该麻将和传统的各类app地方麻将不同,其能够最大化支持人数、牌花色、胡牌玩法等各类自定义配置,以类分子的规则思路尽量使用一套服务端代码可以适配出几十几百款地方麻将,改变当前开发周期极长的传统麻将后台开发模式。
一. 安装部署
1. 对接obespoir框架修改部分
1)配置文件
三种类型的节点(proxy, route, service)每种启动一个节点,当然也可以启动多个,每个节点自己的配置文件;
示例配置文件在echecs_espoir/下,分别为proxy_config.json, route_config.json, service_config.json,配置的核心配置项有:
"host": "监听的主机地址",
"type": "名称",
"api_path": "api加载库路径", // api 路径,如proxy节点为proxy.include_libs, include_libs中加载自定义的接口库
"available_way": "local", // 高可用性配置使用哪种方式存储: local(本地文件存储), mongo(mongodb存储)
"remote_ports": [ // 希望与之建立rpc连接的远程节点配置
{
"host": "127.0.0.1",
"port": 21002,
"token": "helloworldiloveyou~1234567890123",
"encode": 0,
"type": "route" // 节点类型(字符串标识)
}
],
"websocket": { // 节点websocket服务相关配置
"port": 20000,
"token": "helloworldiloveyou~1234567890123", // 32位秘钥 websocket通信
"encode": 0, // 是否启用加密
"timeout": 300, //多久连接超时(单位为秒)
"no_state": { // 无状态的消息ID
"range": [[0, 100000]],
"special": [] // like "game": [110119]
}
},
"http": { // 节点监听的http服务相关配置
"port": 20001,
"token": "helloworldiloveyou~1234567890123", // 32位秘钥 httpserver web通信
"encode": 0 // 是否启用加密
},
"rpc": { // 节点监听的rpc服务相关配置
"port": 20002,
"token": "helloworldiloveyou~1234567890123", // 32位秘钥 rpc通信
"encode": 0, // 是否启用加密
"type": "proxy", // 节点类型
"reconnect_time": 5 // 连接断开时重连时间间隔,默认最多重试3次
}
2)自定义接口
针对于不同的websocket,http, rpc消息,不同产品的业务请求一般差异较大,游戏内部自定义的消息处理接口,可以放在对应的proxy, route, service目录下(当然也可以放其他地方,只需要更改上文配置中的api_path即可)。
如route节点目录下有:
include_libs.py : 集中import服务端自定义的消息处理接口,进行接口注册
rpc_handler.py: 自定义的rpc消息处理接口
http_handler.py: 自定义的http消息处理接口
ws_handler.py: 自定义的http消息处理接口
proxy, service节点与此类似。
2. 部署及启动
1)项目目录
麻将项目服务端代码分为两个部分,一部分负责游戏逻辑(websocket长连接方式);另一部分为大厅逻辑,采用的是基于tornado框架的web服务。
代码分别为:
echecs_espoir: 游戏主体代码(基于obEspoir框架, websocket长连接)
echecs_hall: 游戏大厅代码 (基于tornado框架,http web服务)
客户端代码为:
echecs_client: 客户端js代码 (基于egret框架,js代码由框架的ts语言发布打包自动生成)
2)启动步骤
echecs_hall
启动echecs_hall前需要修改echecs_hall/config.jni配置(mysql和redis的连接地址),然后启动:
python manager.py # 启动主程序
python test/test_api.py # 只在第一次执行,作用是初始化游戏需要的配置(test_init_room_cfg),写入mysql数据库
echecs_espoir
注意如果在pycharm中打开该项目,建议最好echecs_hall和echecs_espoir分开打开,这样不会包路径问题(运行时