我这里分析的是由nats streaming启动nats的,不连接外部nats
1.在nats streaming第一章,已经说明nats streaming会启动客户端连接nats,然后注册消息回调,包括客户端连接,订阅,发布等消息回调
2.订阅客户端发送订阅消息,服务端调用readLoop()进行消息读取,c.parse消息解析,->(c *client) processSub->(c *client) processMsg
for循环调用订阅事件监听者,
3.上面都还算是nats服务器调用,接着消息转发到nats streaming,readLoop->(nc *Conn) processMsgArgs(在这里确定事件的调用者,这里认为有个设计不好的地方,事件调用者确认是通过nc.ps.ma.sid,而这个值是按依赖于初始化自增的,个人认为固定事件id更好,而不是依赖于初始化顺序,在这里订阅事件的sid是4,)->(nc *Conn) processMsg(把消息丢入sub.pHead队列)->
(nc *Conn