goim解析-架构图

goim是用来搭建im系统的一套开源服务,主要包含comet、logic、router和job四个服务,然后也需要和消息队列服务kafka一起使用。

下图是四个程序启动时开启的不同协议的服务

  • comet是直接和客户端保持长连接的有状态服务,启动tcp和websocket服务。rpc是提供给job服务调用的。
  • logic是无状态服务,这里放置主要的业务逻辑。rpc服务供给comet调用。http是提供给其他系统模块调用,有其他业务需要给im连接用户发消息通知时,就可以调用logic的http来发送。
  • router是用来保存状态的,主要是在部署多个comet节点时,客户端最终和哪个节点建立了长连接,这样的关联关系。rpc服务提供给logic和job调用。作为一个纯内存存取操作的服务,也可以替换成redis之类的应用。
  • job是用来负责具体推送消息的服务。当logic的rpc被调用后,会执行一些业务逻辑,如果需要发送通知,就会把消息发送给kafka。job监听kafka,接收到kafka的消息后,job就会调用comet的rpc服务,把消息写到对应客户端的tcp连接里。