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 模块。
其中的调用关系如下:
其中 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
4,logic 模块
logic 模块是comet 模块调用的,接受 comet 模块的命令,
然后进行处理,再发送的消息的kafka队列上,同时链接 router 模块,记录用户的 uid server room 等信息。同时获得router模块的信息。
5,router 模块
router 主要记录了用户的session信息。存储在 Bucket 对象里面。
5,job 模块
job服务每秒都在同步 comet的信息,然后再读取 kafka队列的信息。
push 到相关的comet服务器上。用户就接受到了消息。
6,总结
简单的了解了下 goim的代码结构。这个是一个单机的部署。
有些地方还是没有太明白,慢慢学习吧。下面可以使用goim 开发。
一个简单的聊天系统了,边学习边使用吧。
本文的原文连接是: http://blog.****.net/freewebsys/article/details/78847570
未经博主允许不得转载。
博主地址是:http://blog.****.net/freewebsys