有種寫個(gè)開源mqtt服務(wù)器的沖動(dòng)

近來(lái)對(duì)于mqtt服務(wù)器mosquitto和nats服務(wù)器gnatsd稍有研究(三四天時(shí)間),gnastd性能很不錯(cuò),但輸在于沒(méi)有持久化和非標(biāo)準(zhǔn)協(xié)議導(dǎo)致客戶端支持處于弱勢(shì),mosquitto性能太差,代碼極度缺少優(yōu)化,但因?yàn)閯僭趍qtt標(biāo)準(zhǔn),客戶端有優(yōu)勢(shì)。
不想直接改mosquitto,c語(yǔ)言雖然很快,但是寫起來(lái)效率太低,而且沒(méi)有協(xié)程,想要寫出支持多核cpu高并發(fā)高性能程序也是很不容易,雖然有模擬協(xié)程的state threads library開源庫(kù),但是用起來(lái)不輕松。
而gnatsd是用我喜歡的golang寫的,天生支持高并發(fā),而且為了高性能甚至很少使用chan,對(duì)于我這個(gè)性能控來(lái)說(shuō)真是很喜歡。而且nats協(xié)議有點(diǎn)像簡(jiǎn)化版的只支持qos0的mqtt。
雖然github上也有g(shù)olang版的mqtt服務(wù)器但是最多start的那個(gè)已經(jīng)不再更新而是別人fork了個(gè)新的在維護(hù),性能上我直覺(jué)應(yīng)該也比不上gnatsd。
所以我產(chǎn)生了基于qnatsd修改出mqtt服務(wù)器的想法,雖然有了這想法以后心癢難耐的就想開始行動(dòng)但是真的沒(méi)有時(shí)間,所有的時(shí)間都在為自己工作,只能把計(jì)劃放在心中等項(xiàng)目上線以后再說(shuō)。
計(jì)劃第一目標(biāo)只想做到把gnatsd改成支持qos0的mqtt,還是不支持持久化,然后就是加上自定義鑒權(quán)系統(tǒng)和防止同一用戶重復(fù)登陸。這樣直接可以利用大量不同語(yǔ)言的mqtt客戶端,比如我最想要的swift客戶端。

又去翻了一下golang版本的mqtt服務(wù)器,找到這個(gè):
surgemq
也就是上面所說(shuō)的最多star但是很久沒(méi)維護(hù)更新的那個(gè)項(xiàng)目。
還有這個(gè)volantmq,修改自surgemq,最近還在更新。

翻了一下surgemq里面的topic的代碼,跟我上一篇文章分析的gnatsd使用的數(shù)據(jù)結(jié)構(gòu)差不多,算法原理都是一樣。而且這個(gè)項(xiàng)目貌似性能也很不錯(cuò),里面還用到了ringbuf,以后可以拿這個(gè)項(xiàng)目和gnatsd合并修改成自己的mqtt服務(wù)器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容