goim中的数据结构主要存在于需要保存状态的节点,除了logic是无状态外,其他的节点comet、router、job都会有数据结构来保持信息。
comet
comet服务和客户端保持长连接,存在最多最复杂的数据结构
1 | // DefaultServer是全局变量,每启动一个comet服务就会有一个Server对象 |
router
router是goim里专门负责保存数据的服务,对其他节点提供了rpc调用,主要被logic和job调用。这个服务也可以被redis等替代,因为基本就是在读写一些内存数据,没有额外逻辑。
1 | // router也有一个bucket结构体,不过和comet的bucket保存的信息不同,这里主要保存用户、tcp连接、房间等对象的关联信息。 |
job
job服务主要工作就是连接上kafka,接收kafka的消息,然后job调用comet的rpc服务,comet则把请求消息写入到tcp连接,客户端则会接收到通知消息。
1 | // job服务主要工作就是从router上同步channel和commet节点的关联关系,然后当从kafka收到发送通知的请求时,就要调用指定comet节点的rpc服务,进行对应tcp写操作。 |