LollipopGo分布式架构--DB反向代理服务器设计

视频:

LollipopGo:DB反向代理服务器

DB反向代理服务器

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

Index

返回首页


  • 如何设计

  • 流程分析

  • 实例代码

  • 注意事项

  • 如何设计

    
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. 数据库可以采用集群形式部署,具体看实际项目,如果有不懂的可以直接联系我

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


Golang语言社区

ID:Golangweb

www.GameAIs.Com

www.ByteEdu.Com

www.ByteEdu.Org

游戏服务器架构丨分布式技术丨大数据丨游戏算法学

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值