goim 项目一共分为 4 个模块,comet,logic,router,job 模块。 其中的调用关系如下: ![](https://box.kancloud.cn/70c9d49e9141a635260f9a289fce1f86_963x610.png) 其中 comet服务 在最前面对外提供服务,提供 tcp 和 websocket 两种服务。 接受到消息之后 交给 logic 模块处理。logic 模块在调用 router 查询路由信息。将发送的消息交给 kafka,再由 job 服务读取kafka的消息,推给 comet服务。 拆分成这么多模块的好处是可以多实例部署。其中 在 comet,router,logic 模块都提供了性能监控 net/http/pprof 同时还提供了monitor 服务,服务启动之后访问 xxx:port/monitor/ping 返回 ok 说明服务启动正常,方便运维检查系统。 **comet 模块** comet 模块是在最前端,主要负责和client的链接保持,同时接受,发送消息,通知到客户端。检查链接是否断开。 **logic 模块** logic 模块是comet 模块调用的,接受 comet 模块的命令, 然后进行处理,再发送的消息的kafka队列上,同时链接 router 模块,记录用户的 uid server room 等信息。同时获得router模块的信息。 **router 模块** router 主要记录了用户的session信息。存储在 Bucket 对象里面。 **job 模块** job服务每秒都在同步 comet的信息,然后再读取 kafka队列的信息。 push 到相关的comet服务器上。用户就接受到了消息。