网关概述
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
网关需求
1.与客户端建立、保持连接
2.过滤信息
3.消息转发
4.负载均衡
5.可动态扩展
6.白名单
7.协议适配
网关结构
网关流程
网关细节
通信使用TCP协议、protobuf,TCP包结构体为 | Len | Sign | IsCompress | extra |data | Len为包长度,Sign为标识符,IsCompress 为压缩标识符,extra为扩展,data为包携带信息由protobuf封装。
网络库方面有一部分借鉴了Leaf网络库,提供一个接口用户只需编写函数并设置,当有用户信息传输则会调用此函数。
在网关中定义了服务记录,用来快速寻找号码对应的服务编号。每当有服务上线会自动向ETCD进行注册,注册成功后ETCD会将此新加入的服务信息发送给网关,网关记录其号码。当客户端在游戏时,会频繁的发送信息。因此使用了结构体中的extra字段,其包含目标服务器编号,网关只需要对着内存进行寻找并转发,而不用去Redis寻找,降低延迟。
并且在所有组件中没有专门的处理线程,由于go的特性协程所需要的资源极小,因此每个消息开一个协程进行处理,如果有需要顺序处理的可以自行创建一个队列顺序处理消息。