经测试此产品运营稳定
包含数十款房卡子游戏、俱乐部(五级权限)、比赛场
客户端采用Lua脚本开发 、后端Python
看过一些棋牌产品 很多产品基于此套棋牌框架开发而来 算市面上一个主流框架
但却没有发现一个关于此框架的文档说明 特此个人准备写几篇文档以方便新手和后来的开发维护人员借鉴 以节约队伍开发成本 尽快步入产品开发过程
Web提供的API服务是基于tornado框架实现
网关与业务之间使用了twisted异步通讯库 用于提升性能 socket长链接方式
框架在设计上支持负载均衡 除路由服务外 其他的服务器皆支持动态无限量扩展部署
Web服务 -- web_server.py
--- Http短链接形式 服务更加稳定 且在用户基数比较大的时候可以很有效的节省服务器资源 减轻服务器负担
--- 提供APIs(提供除子游戏 游戏层面的消息通讯外的所有接口 如比较高频的创建房间、加入房间)
---提供游戏系统APIs 方便运营对数据和游戏进行管控
游戏网关 -- gate.py --> base_server.py
--- 服务端除web服务外的 唯一向外开放的网络接口
--- 实现系统和用户(群)通讯 维护每个链接进来客户端的session 将seesion与用户uid对应起来
路由服务 -- router.py --> base_server.py
--- 接受来自web端的请求、游戏服务消息 将消息转发到相应的服务
游戏服务类 -- base_game.py --> base_server.py
--- 发送消息给路由服务 路由将消息转发到网关 网关将消息根据uid(s)发送给相应的客户端 客户端发送消息到服务器则路径相反
网络部分通讯流程关系图:
代码详解
./web-cocos/web_server.py ---> 基于tornado实现的一个web服务处理器
#配置web服务器端口信息
define("port", default=8193, help="run on the given port", type=int)
class Application(tornado.web.Application):
def __init__(self):
#此处仅列出几个代表性的api
handlers = [
#苹果内购iap接口
("/iap", IAPHandler),
#游客登陆
("/guestLogin", GuestLoginHandler),
#微信登陆
("/wechatLogin",WeChatLoginHandler),
#创建房间
("/createRoom", CreateRoomHandler),
#获取钻石信息
("/getDiamondsChange", DiamondsHandler),
#查询房间信息
("/queryServerInfo", QueryRoomHandler),
#...
#...
]
#注册web消息处理接口
tornado.web.Application.__init__(self, handlers, **settings)
./server-cocos/gate.py ---> ./server-cocos/base/init.py
def _do_start(server_class, server_id, service_type, server_name, is_gate):
assert server_id
assert service_type
#如果是网关服务 则从数据库 'servers'表中读取服务器信息
if is_gate:
server_info = servers_model.get(server_id)
else:
#如果是子游戏服务 则从数据库‘server_rooms’表中读取服务器信息
server_info = servers_model.get_idle_room(server_id, service_type)
if not server_info:
text = f"\033[31mError\033[0m {server_name} - \033[31m{service_type}\033[0m - {server_id} isn't idle server!"
print(text)
main_logger.fatal(text)
sys.exit(0)
#启动服务
_run_server(server_class, server_id, service_type, server_name, server_info)
./server-cocos/hall/gateway.py 维护每个链接进来的客户端session 且提供账户验证服务、系统服务