【转】网关服务器学习
大致讲述下 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 转交到逻辑层进行处理。