LollipopGo:DB反向代理服务器

DB反向代理服务器

游戏服务器开发过程中,整个服务器的架构设计对于项目的影响是至关重要的,其中包括登录流程,消息机制流程,消息加密流程 内部服务器消息跳转,定时任务等。 centos 系统为例,给大家梳理下游戏架构的基础设计思想。

如何设计

1. DB数据库反向代理,属于内网权限访问,与外网隔离
2. 提供功能主要是处理数据库的读写等,例如 登录服务器的反向代理,主要是用户的信息的校验。而游戏组的DB
反向代理,是提供游戏数据的保存等,所以正常情况下,DB反向代理在每组服务器组中是2组DB反向代理服务器。
3. DB方向代理还有一个功能,可以动态切换不同数据库:redis,mongo,mysql等
4. DB反向代理服务器开发人员只提供接口即可
5. DB反向代理服务器与所有的服务器通信都采用异步RPC通信

流程分析

1. 整个流程都比较简单,主要是提供数据接口服务
2. 建议每组物理机上部署2组DB数据库反向代理,主要是针对不等同的业务逻辑
3. 建议在处理数据时候,保证处理数据的频率,防止恶意访问

实例代码

// 主函数
func main()  {
    conf.InitConfig()
    Mysyl_DB.Init()
    MainListener(conf.GetConfig().Server.WSAddr)
}

// 监听
func MainListener(strport string) {
    rpcRegister()
    tcpAddr, err := net.ResolveTCPAddr("tcp", ":"+strport)
    checkError(err)
    Listener, err := net.ListenTCP("tcp", tcpAddr)
    checkError(err)

    for {
        defer func() {
            if err := recover(); err != nil {
                strerr := fmt.Sprintf("%s", err)
                fmt.Println("异常捕获:", strerr)
            }
        }()
        conn, err := Listener.Accept()
        if err != nil {
            fmt.Fprint(os.Stderr, "accept err: %s", err.Error())
            continue
        }
        go jsonrpc.ServeConn(conn)
    }
}

// RPC注册
func rpcRegister() {
    _ = rpc.Register(new(ac_game.AcRPC))
    _ = rpc.Register(new(cf_game.CfRPC))
    _ = rpc.Register(new(game.GameRPC))
}

// RPC获取登录数据的例子
func (this *AcRPC) GetUserLogin(data *twlib_proto.C2SUserLogin, reply *twlib_user.UserSt) error {
    sql := "select id,avatar,name,sex,lev,areacur from ac_account where loginname='" + data.AccountName + "' AND loginpw='" + data.AccountPw + "'"
    fmt.Println(sql)
    rows, err := GetAcGameConn().Query(sql)
    defer rows.Close()
    if err != nil {
        return err
    }
    recliner := twlib_user.UserSt{}
    for rows.Next() {
        rows.Scan(&recliner.RoleUid, &recliner.RoleAvatar, &recliner.RoleName, &recliner.RoleSex, &recliner.RoleLev,
            &recliner.RoleAvatar)
        recliner.ChannelId, _ = strconv.Atoi(recliner.LatestArea)
    }
    fmt.Println(recliner)
    recliner.ServerList = this.GetAreacur(0, nil)
    *reply = recliner
    return nil
}
    

注意事项

  1. 反向代理服务器启动顺序
以LollipopGo分布式游戏架构为例:
1. DB反向代理服务器一定是在所有服务器前启动,主要是注册到反向代理服务器
2. 数据库可以采用集群形式部署,具体看实际项目,如果有不懂的可以直接联系我

你可能感兴趣的:(LollipopGo:DB反向代理服务器)