承接自己《中小型棋牌类网络游戏服务端架构》博文,用Golang实现基础架构逻辑后,准备再次谈谈我的想法。
已实现的逻辑与前文描述有几点不同:
- Gateway更名为Proxy,DBProxy更名为DB
- Proxy同时持有与(Login, Game)不同类型服务器的多条连接
- DB不参与负载均衡,考虑是棋牌数据库负载不高,即使需要扩展多个也可以通过不同服务器配置指向不同的DB来扩展
- 消息头格式以源码实现的为主
- 心跳机制在不考虑客户端的前提下,服务端会主动发送心跳包,但并非总是特定间隔时间发送
如果阅读起来感觉晦涩难懂,那就不妨直接看源码
Network
包含Server,Client,RPC三个组件。
Server
网络服务端组件,持有监听套接字,管理所有客户端连接(map存储,value可以存储自定义值),一个客户端连接到来起一个Goroutines接收消息,调用Stop将等待所有Goroutines退出才返回,只通知业务逻辑“收到消息”“连接关闭”两种事件。
Client
网络客户端组件,持有与服务端的连接,实现补偿策略重连机制,只通知业务逻辑“客户端连接成功”“客户端收到消息”两种事件。
RPC
远程过程调用