【转】网关服务器学习

大致讲述下 watchdog、gate、gateserver 之间的关系。 
(如果是 websocket 只需要将 watchdog 换成 wswatchdog 、gate 换成 wsgate 即可)

一、开启监听(开启服务端的socket) 
1、首先,启动一个 watchdog 服务,由它来负责启动 gate 服务。 
2、然后,调用 watchdog 的 "start" 命令,根据 watchdog 的 dispatch,指派给 gate_msg 处理 。 
3、gate_msg处理 "start" 命令, 调用 gate服务 的 "open" 命令。 
4、gate服务处理 "open" 命令,根据 gateserver 的 dispatch 指派给 CMD.open 处理。 
5、CMD.open 建立 "0.0.0.0":port 的连接,开始监听客户端来的连接。并且调用 gate.handler.open 函数。 
6、gate.handler.open 主要是让 gate 记录 watchdog 的地址,方便日后调用。

二、客户端连接(开启客户端的socket) 
1、当有客户端连接过来时,底层会响应 gateserver 内部的 MSG.open(fd, msg) 函数。 
2、MSG.open(fd, msg) 函数首先做连接数限制,然后调用 gate.handler.connect 函数。 
3、gate.handler.connect 负责通知 watchdog,调用 "socket.open" 命令,根据 watchdog 的 dispatch,指派给 socket_msg 处理,调用 socket_msg.open(fd, ip)。 
4、socket_msg.open(fd, ip) 调用gate服务的 "accept" 命令。 
5、gate服务处理 "accept" 命令,根据 gateserver 的 dispatch 指派给 gate.CMD.accept 处理。 
6、gate.CMD.accept 调用 gateserver 的 openclient(fd) 函数进行客户端连接。

三、消息接收 
1、当有客户端 send 消息过来时,底层会相应 gateserver 内部的 MSG.data 函数。 
2、MSG.data 被 dispatch_msg 重写,处理完握手包后,调用到 gate.handler.message 
3、gate.handler.message 调用 socket_msg.data 转交到逻辑层进行处理。

posted @ 2019-02-25 17:19  colourstar  阅读(315)  评论(0编辑  收藏  举报