美文网首页
暂时放弃nats - gnatsd

暂时放弃nats - gnatsd

作者: 云上听风 | 来源:发表于2018-04-29 21:26 被阅读0次

    放弃的原因


    都下决心用gnatsd了,最终放弃的原因是ios平台居然没有好的客户端。
    官方推荐的swift客户端: travelish/SwiftNats 最后更新是2016年,而且代码太简陋了,很多功能都没实现。

    另外一个开源raykrow/swifty-nats看上去不错,可惜用了swifty-nio,不支持ios平台。

    自己写又实在是没时间没精力。算了,先暂时放弃gnatsd吧,毕竟没有持久化在未来也是头疼。
    还是用mosquitto先顶着吧。

    另外吐槽一下这个名字gnatsd,真是非常拗口,隔壁兄弟nsq多顺口好记而且还简短,你再不济叫个gonats也好啊。

    gnatsd代码学习


    gnatsd做为golang写的项目,代码质量还是很不错的,不像大多数golang程序大量泛滥的使用chan,而是尽量减少锁的使用,在必须使用锁的地方使用Atom、RWMutex和Mutex。这样性能比nsq强上一截(当然没有持久化也是速度快的很大原因)。
    因为原本像上一篇文章所写的想修改gnatsd,所以粗粗看了一点代码,大的架构如下:
    在唯一的主Server类中Listen tcp端口,Accept客户端连接以后开新goroutine运行Client的readLoop循环读取数据,解析命令以后就在此goroutine执行逻辑。比如收到pub消息,调用processMsg遍历所有sub把消息使用deliverMsg发出去。
    在Read的这个goutinue也调用了别的sub的Write,在遍历sub时使用了Mutex锁。
    所以Client的Read和Write没有特意开启两个goroutine分离,而是Read之后需要回复自己就在同一个goroutine里Write,另外如果Client sub了消息则Write还在别的Client的Read goroutine里被动调用,使用锁保护。
    也就是说一个Client只占用一个goroutine。

    相关文章

      网友评论

          本文标题:暂时放弃nats - gnatsd

          本文链接:https://www.haomeiwen.com/subject/jmealftx.html