代理服务器
游戏服务器开发过程中,整个服务器的架构设计对于项目的影响是至关重要的,其中包括登录流程,消息机制流程,消息加密流程 内部服务器消息跳转,定时任务等。 centos 系统为例,给大家梳理下游戏架构的基础设计思想。
如何设计
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
)
注意事项
- 反向代理服务器启动顺序
以LollipopGo分布式游戏架构为例:
1. 反向代理服务器需要在其他服务器启动前启动,原因是反向代理相当于内网服务器是服务器,而内网服务器角色是
“客户端”,所以需要先启动后内网服务器主动连接反向代理服务器
2. 游戏反向代理服务器是每组服务器的消息总入口,所以反向代理服务器的逻辑功能尽量简单
3. 反向代理服务器功能:客户端注册,内网服务器注册,消息转发到对应服务器,消息转发到指定玩家
网友评论