- Java游戏服务器架构实战
- 王广帅编著
- 1034字
- 2025-03-19 16:19:12
1.3.2 网关
网关就是网络通信的第一关,是服务器上所有服务的大门。它负责与外界联系,并且可以“辨正邪,识真伪”,保证内部服务收到的都是合法消息,限制请求流量,防止请求超载。如图1.2所示,因为我们有两种不同的通信方式,长连接通信和短连接通信,所以这里我们定义了两种不同的网关,用于处理不同协议的请求。
网关基本的职责主要有以下几点。
●权限验证。保证请求合法。
●数据加密解密。保证数据安全,防止消息被修改。
●消息路由。分发客户端消息到指定的服务。
●负载均衡。当请求过大,负责分流到多个服务处理。
●请求流量控制。将请求流量控制在一定范围内,防止流量过大,导致服务器崩溃。
●如果是长连接,管理长连接,使用心跳检测保证连接正常或关闭空闲连接。
●支持不同的协议,将收到的客户端消息使用统一的协议发送到业务服务。
网关像一个过滤器,检测并拦截一切非法请求。如果收到非法请求,在网关就会将其处理掉,而不会让它穿透到业务服务那里。这样在做业务服务开发的时候,特别是在做分布式服务时,就不用每个服务再去做请求检测了,只关注业务功能开发即可。
网关也像一个路由器,负责客户端请求消息的转发和服务器响应消息的返回。这样不管网关后面有多少个业务服务,客户端只需要与网关建立一条连接即可和所有业务服务通信。
网关又像一个阀门,控制客户端请求的频率,防止请求过载导致服务崩溃。这主要是针对一些恶意客户端用户,防止它们使用连发工具,绕开客户端代码的正常防护,对服务器发送大量无用的请求,造成资源浪费。还有恶意者获取服务器的IP地址和端口之后,通过某种手段建立大量的空闲连接(只是建立连接,而不发送任何消息),导致连接长时间被占满,使用户连接不上服务器。网关通过连接空闲检测,关闭空闲连接,以节约服务器资源给用户使用。
心跳检测是指在客户端与服务器都没有数据交互的情况下,一般由客户端每隔一定时间向服务器发送一个连接检测包,检测长连接是否正常。如果长时间未收到任何消息,或在一定时间内收到的都是心跳消息,说明当前客户端的连接是空闲的,没有用户在操作了,这时,服务器可以主动断开连接,回收服务器资源。
网关也可以对客户端不同的协议进行统一转化。比如一个游戏,刚开始是使用Unity开发的手机App客户端,使用的通信协议是ProtoBuffer,后来又想使用H5重新开发一个版本,H5使用JSON格式通信,对于业务功能来说都是一样。所以可以在网关处把接收到的不同客户端的消息统一转化为一种格式,然后再转发到业务服务,这样业务服务不需要任何改动,就可以支持不同的客户端类型。