有种写个开源mqtt服务器的冲动

近来对于mqtt服务器mosquitto和nats服务器gnatsd稍有研究(三四天时间),gnastd性能很不错,但输在于没有持久化和非标准协议导致客户端支持处于弱势,mosquitto性能太差,代码极度缺少优化,但因为胜在mqtt标准,客户端有优势。
不想直接改mosquitto,c语言虽然很快,但是写起来效率太低,而且没有协程,想要写出支持多核cpu高并发高性能程序也是很不容易,虽然有模拟协程的state threads library开源库,但是用起来不轻松。
而gnatsd是用我喜欢的golang写的,天生支持高并发,而且为了高性能甚至很少使用chan,对于我这个性能控来说真是很喜欢。而且nats协议有点像简化版的只支持qos0的mqtt。
虽然github上也有golang版的mqtt服务器但是最多start的那个已经不再更新而是别人fork了个新的在维护,性能上我直觉应该也比不上gnatsd。
所以我产生了基于qnatsd修改出mqtt服务器的想法,虽然有了这想法以后心痒难耐的就想开始行动但是真的没有时间,所有的时间都在为自己工作,只能把计划放在心中等项目上线以后再说。
计划第一目标只想做到把gnatsd改成支持qos0的mqtt,还是不支持持久化,然后就是加上自定义鉴权系统和防止同一用户重复登陆。这样直接可以利用大量不同语言的mqtt客户端,比如我最想要的swift客户端。

又去翻了一下golang版本的mqtt服务器,找到这个:
surgemq
也就是上面所说的最多star但是很久没维护更新的那个项目。
还有这个volantmq,修改自surgemq,最近还在更新。

翻了一下surgemq里面的topic的代码,跟我上一篇文章分析的gnatsd使用的数据结构差不多,算法原理都是一样。而且这个项目貌似性能也很不错,里面还用到了ringbuf,以后可以拿这个项目和gnatsd合并修改成自己的mqtt服务器。

猜你喜欢

转载自blog.csdn.net/gamereborn/article/details/80211367