Erlang是我非常喜歡的一門編程語(yǔ)言,當(dāng)然曾經(jīng)也懷疑過Erlang是不是太老了、是不是過時(shí)了。尤其當(dāng)golang剛出來(lái)的那段時(shí)間。不過感謝自己的堅(jiān)持,也感謝What's App的成功,讓我堅(jiān)持了下來(lái)。
我一直堅(jiān)信,熱部署是很重要的存在。函數(shù)式語(yǔ)言的無(wú)狀態(tài)、無(wú)鎖并發(fā)特性非常適合做分布式的服務(wù)。
現(xiàn)實(shí)和理想之間的差距還是有的,不大,也就孫猴子一個(gè)筋斗云的距離而已??粗鳭ava,Cpp們擁簇日益劇增,而Erlang始終是個(gè)小眾語(yǔ)言。甚至當(dāng)Javascript都已經(jīng)開始挑大梁、當(dāng)主角的時(shí)候,Erlang還是那個(gè)Erlang,不溫不火。
作為熱愛Erlang的我來(lái)說(shuō),一直希望能為Erlang做出點(diǎn)貢獻(xiàn),為Erlang社區(qū)做出點(diǎn)貢獻(xiàn)。這才有了前面的 Erlang那些事兒 文集,這才有了 使用Erlang搭建IM服務(wù) 這個(gè)文集。
這個(gè)文集的目標(biāo)是在7月中旬之間更新完畢,會(huì)從存儲(chǔ)訪問、協(xié)議解析、客戶端請(qǐng)求&返回、消息推送等幾個(gè)層面描述IM的基礎(chǔ)服務(wù)搭建。
由于業(yè)余時(shí)間推動(dòng)這個(gè)事情的進(jìn)展,因此不會(huì)涉及非常復(fù)雜的IM業(yè)務(wù)。只會(huì)涉及 點(diǎn)與點(diǎn)之間的即時(shí)聊天,離線消息獲取,未讀技術(shù)更新 這三塊業(yè)務(wù)。至于群聊的話,將于7月中旬以后再做更新規(guī)劃。
目錄預(yù)告
- IM的業(yè)務(wù)規(guī)劃、模塊劃分、技術(shù)選型
- 表結(jié)構(gòu)設(shè)計(jì)、使用Erlang訪問MySQL實(shí)現(xiàn)
- 使用Erlang訪問Redis實(shí)現(xiàn)
- 網(wǎng)絡(luò)協(xié)議設(shè)計(jì) -- 包頭
- 網(wǎng)絡(luò)協(xié)議設(shè)計(jì) -- 包體
- 網(wǎng)絡(luò)協(xié)議設(shè)計(jì) -- 業(yè)務(wù)相關(guān)
- 錯(cuò)誤碼設(shè)計(jì)
- 登陸流程
- 實(shí)時(shí)聊天流程
- 離線消息流程
- 未讀計(jì)數(shù)流程
- 未讀消息流程
工程目錄搭建
我們使用rebar完成Erlang工程的初始化。
創(chuàng)建完成之后的目錄如圖所示:

Tips
- 關(guān)于Erlang安裝、開發(fā)編輯器、Erlang語(yǔ)法等請(qǐng)閱讀《Erlang編程指南》或移步我的文集:Erlang那些事兒
- 關(guān)于rebar,請(qǐng)閱讀文章:https://github.com/rebar/rebar/wiki
- 源碼地址: https://github.com/Allen5/im