Python 主流棋牌游戏 服务端 框架分析 原创笔记

经测试此产品运营稳定
包含数十款房卡子游戏、俱乐部(五级权限)、比赛场

客户端采用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 且提供账户验证服务、系统服务

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值