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

视频:

文档地址:www.GameAIs.Com

LollipopGo:反向代理服务器

   

反向代理服务器    

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

   

Index

返回首页

  • 如何设计

  • 流程分析

  • 实例代码

  • 注意事项

  •        

    如何设计

       
    
1. 在整体的架构中,正式上线会在反向代理服务器前加nginx作为负载均衡,通过nginx来提高玩家在线人数
2. 在游戏开发过程中,不同游戏有不同的架构设计,例如 H5小游戏或弱联网的游戏,可能服务器单服就搞定;
但是对于注册量可以达到少则百万动辄千万用户,游戏架构设计上就要有讲究了,服务器最好采用集中消息处理、
动态拓展等,同时部分服务,例如战斗服等不需暴漏给外网
3. 为了满足2步骤需求,先不考虑负载均衡,反向代理服务器主要可以做到:有效隔离内网服务器,消息统一处理
4. 反向代理服务器功能:消息精准转发给相应的内网服务器
   
   

流程分析

    
1. 反向代理服务器主要是作为所有消息的入口统一管理,流量上反向代理是最大的相对于内网服务器
2. 可以有效的隔离内网服务器及外网的通信,安全性上增加
3. 处理消息很简单,消息的解析、消息转发到相应的内网服务器

实例代码

    
// 主函数
type ProxyServer struct {
	Connection *websocket.Conn
	StrMD5     string
	MapSafe    *concurrent.ConcurrentMap
}

var (
	cache *cache2go.CacheTable
	M     *concurrent.ConcurrentMap
)

func main()  {
	conf.InitConfig()
	runtime.GOMAXPROCS(runtime.NumCPU())
	http.Handle("/"+conf.GetConfig().Server.URL, websocket.Handler(BuildConnection))
	if err := http.ListenAndServe(conf.GetConfig().Server.WSAddr, nil); err != nil {
		glog.Info("Entry nil", err.Error())
		glog.Flush()
		return
	}
}

func BuildConnection(ws *websocket.Conn) {
	data := ws.Request().URL.Query().Get("data")
	if data == "" {
		glog.Info("data is Nil")
		glog.Flush()
		return
	}
	impl.InitConnection(ws)
}

// 反向代理服务器的ServerId
const (
	SERVER = iota
	ProxyServerId   // ProxyServerId == 1
	GameServerId    // GameServerId   == 2
	BattleServerId  // BattleServerId == 3
	GMServerId      // GMServerId == 4
	DBServerId      // DBServerId == 5
	CenterServerId  // CenterServerId == 6
)

// 反向代理服务器的消息定义
const (
	INIYPROXY             = iota //  ==0
	C2Proxy_SendDataProto        //  C2Proxy_SendDataProto == 1
	Proxy2C_SendDataProto        //  Proxy2C_SendDataProto == 2
	G2Proxy_ConnDataProto        //  G2Proxy_ConnDataProto == 3
	Proxy2G_ConnDataProto        //  Proxy2G_ConnDataProto == 4
	G2Proxy_SendDataProto        //  G2Proxy_SendDataProto == 5
	Proxy2G_SendDataProto        //  Proxy2G_SendDataProto == 6
	C2Proxy_ConnDataProto        //  C2Proxy_ConnDataProto == 7
	Proxy2C_ConnDataProto        //  Proxy2C_ConnDataProto == 8
)

	
   

注意事项

1. 反向代理服务器启动顺序

   

以LollipopGo分布式游戏架构为例:
1. 反向代理服务器需要在其他服务器启动前启动,原因是反向代理相当于内网服务器是服务器,而内网服务器角色是
“客户端”,所以需要先启动后内网服务器主动连接反向代理服务器
2. 游戏反向代理服务器是每组服务器的消息总入口,所以反向代理服务器的逻辑功能尽量简单
3. 反向代理服务器功能:客户端注册,内网服务器注册,消息转发到对应服务器,消息转发到指定玩家

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


Golang语言社区

ID:Golangweb

www.GameAIs.Com

www.ByteEdu.Com

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

Go语言中文API地址:doc.Golang.Ltd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值