goim(3):goim代码简单的分析

本文的原文连接是: http://blog.****.net/freewebsys/article/details/78847570
未经博主允许不得转载。
博主地址是:http://blog.****.net/freewebsys

1,关于 goim


上次已经把goim 简单的本地安装了下,下面开始学习里面的代码了。
网络上面已经有了很好的分析了:
http://cdn2.jianshu.io/p/8bd96a9a473d
https://laohanlinux.github.io/2016/12/22/goim%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/
但是呢,学习嘛,还是自己也研究下,画画图,分析下。
上次已经把goim单机跑起来了:
http://blog.****.net/freewebsys/article/details/78847333

2,整体模块分析


goim 项目一共分为 4 个模块,comet,logic,router,job 模块。
其中的调用关系如下:

goim(3):goim代码简单的分析

其中 comet服务 在最前面对外提供服务,提供 tcp 和 websocket 两种服务。
接受到消息之后 交给 logic 模块处理。logic 模块在调用 router 查询路由信息。将发送的消息交给 kafka,再由 job 服务读取kafka的消息,推给 comet服务。
拆分成这么多模块的好处是可以多实例部署。其中 在 comet,router,logic 模块都提供了性能监控 net/http/pprof
参考:http://www.cnblogs.com/yjf512/archive/2012/12/27/2835331.html
同时还提供了monitor 服务,服务启动之后访问 xxx:port/monitor/ping
返回 ok 说明服务启动正常,方便运维检查系统。

3,comet 模块


comet 模块是在最前端,主要负责和client的链接保持,同时接受,发送消息,通知到客户端。检查链接是否断开。

其中rpc调用参考:
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/08.4.md

goim(3):goim代码简单的分析

4,logic 模块


logic 模块是comet 模块调用的,接受 comet 模块的命令,
然后进行处理,再发送的消息的kafka队列上,同时链接 router 模块,记录用户的 uid server room 等信息。同时获得router模块的信息。

goim(3):goim代码简单的分析

5,router 模块


router 主要记录了用户的session信息。存储在 Bucket 对象里面。
goim(3):goim代码简单的分析

5,job 模块


goim(3):goim代码简单的分析

job服务每秒都在同步 comet的信息,然后再读取 kafka队列的信息。
push 到相关的comet服务器上。用户就接受到了消息。

6,总结


简单的了解了下 goim的代码结构。这个是一个单机的部署。
有些地方还是没有太明白,慢慢学习吧。下面可以使用goim 开发。
一个简单的聊天系统了,边学习边使用吧。

本文的原文连接是: http://blog.****.net/freewebsys/article/details/78847570
未经博主允许不得转载。
博主地址是:http://blog.****.net/freewebsys