代码改变世界

GoNet项目学习笔记(二)

2015-07-14 22:17  量子与唯心  阅读(264)  评论(0编辑  收藏  举报

二)Game Server模块启动分析

主函数入口位于src/agent/main.go,启动流程为:

1. 按顺序初始化导入模块cfg;geoip, db模块等等…

2. 启动HUB客户端,连接HUB Server

3. 启动signal routine 

    1) 处理SIGHUP信号,加载程序配置
    2) 处理SIGTERM信号,程序退出时关闭并等待所有GS的Agent退出

4. 启动Sys routine

    1) 处理系统消息

    2) 定期强制内存回收

5. 启动统计客户端,连接到Stats Server。

6. 启动TCP监听,接收客户端(Player)连接,每个客户端用一个routine处理。

流程图:

 

上图中,Session队列用来接收HubServer转发过来的其它GameServer的消息。GS在启动时HubClient会与HS建立连接同时守护该连接

(src/agent/hub_client/hun_client.go ->_receiver()),接收HS发过来的消息。当HubClient收到HS的消息时(_receiver()函数),会根据IPCObject查找到对应的Session队列(src/agent/hub_client/hun_client.go ->_deliver())。