Redis創(chuàng)始人開(kāi)源最小聊天服務(wù)器,僅200行代碼
大家好,我是TJ
一個(gè)勵(lì)志推薦10000款開(kāi)源項(xiàng)目與工具的程序員
大家好,我是TJ君,一個(gè)專(zhuān)注推薦開(kāi)源、免費(fèi)、好用工具的程序員!
中午時(shí)候,在技術(shù)交流群里聊起關(guān)于Redis創(chuàng)始人的一些趣事,比如離開(kāi)Redis之后,去寫(xiě)科幻小說(shuō)之類(lèi)的。
因?yàn)楹闷婵苹眯≌f(shuō),TJ君就去搜索了一下。結(jié)果一搜,發(fā)現(xiàn)Redis作者最近居然又搞了個(gè)新活兒!
世界上最小的聊天服務(wù)器
這次Redis作者的新開(kāi)源項(xiàng)目名叫:SmallChat。
從關(guān)于內(nèi)容中可以知道,這個(gè)開(kāi)源項(xiàng)目是要打造最小的聊天服務(wù)器。再?gòu)拈_(kāi)源項(xiàng)目的內(nèi)容中來(lái)看,確實(shí)如此,就下面這些:
代碼部分除去大量注釋之后,更是驚人的只有200+行代碼,可以說(shuō)真的是做到了極致的精簡(jiǎn)。
起源與未來(lái)
在該項(xiàng)目的README中,目前還沒(méi)有更多關(guān)于該項(xiàng)目的使用說(shuō)明,更多的是關(guān)于該項(xiàng)目的背景和未來(lái)展望。
內(nèi)容也是非常值得大家細(xì)品,TJ君從中感受到一名優(yōu)秀開(kāi)發(fā)者的思維模式,是非常值得大家去學(xué)習(xí)的。我們也可以去多學(xué)習(xí)這種思維方式,來(lái)多創(chuàng)造一些更有意思的東西。
下面一起來(lái)看看他的故事:
昨天和幾個(gè)朋友聊天,大部分都是前端開(kāi)發(fā)人員,離系統(tǒng)編程有點(diǎn)遠(yuǎn)。我們正在回憶 IRC 的舊時(shí)光。我說(shuō)道:編寫(xiě)一個(gè)非常簡(jiǎn)單的 IRC 服務(wù)器是每個(gè)人都應(yīng)該做的經(jīng)歷(我向他們展示了我用 TCL 編寫(xiě)的實(shí)現(xiàn);我很震驚我在 18 年前寫(xiě)了它:時(shí)間過(guò)得很快)。這樣的程序中有一些非常有趣的部分。單個(gè)進(jìn)程執(zhí)行多路復(fù)用、獲取客戶(hù)端狀態(tài)并在客戶(hù)端擁有新數(shù)據(jù)后嘗試快速訪問(wèn)此類(lèi)狀態(tài),等等。
但后來(lái)討論發(fā)生了變化,我想,我將向您展示一個(gè)用 C 編寫(xiě)的非常簡(jiǎn)單的示例。您可以編寫(xiě)的最小的聊天服務(wù)器是什么?為了真正做到最小化,我們不應(yīng)該需要任何合適的客戶(hù)。即使不是很好,它也應(yīng)該與 telnet 或者 netcat 一起使用。服務(wù)器的主要操作只是接收一些聊天行并將其發(fā)送到所有其他客戶(hù)端,有時(shí)稱(chēng)為扇出操作。然而,這需要適當(dāng)?shù)墓δ埽缓笫蔷彌_等等。我們希望它更簡(jiǎn)單:讓我們使用內(nèi)核緩沖區(qū)進(jìn)行欺騙,并假裝我們每次都從客戶(hù)端收到完整的行(這個(gè)假設(shè)在實(shí)踐中通常是正確的,所以事情還算有效)。
好吧,通過(guò)這些技巧,我們可以實(shí)現(xiàn)一個(gè)聊天,甚至能夠讓用戶(hù)在短短 200 行代碼中設(shè)置他們的昵稱(chēng)(當(dāng)然,刪除空格和注釋?zhuān)R驗(yàn)槲覍?xiě)了這個(gè)小程序作為給我的朋友們的例子,所以我決定也將它推送到 GitHub 上。
關(guān)于未來(lái)的工作:
在接下來(lái)的幾天里,我將繼續(xù)修改這個(gè)程序,以使其進(jìn)化。不同的演變步驟將根據(jù)我的寫(xiě)作系統(tǒng)軟件系列的 YouTube 劇集(涵蓋此類(lèi)變化)進(jìn)行標(biāo)記。這是我的計(jì)劃(可能會(huì)改變,但或多或少這就是我想要涵蓋的內(nèi)容):
-
實(shí)現(xiàn)讀和寫(xiě)的緩沖 -
避免使用線(xiàn)性數(shù)組,使用字典數(shù)據(jù)結(jié)構(gòu)來(lái)保存客戶(hù)端狀態(tài) -
編寫(xiě)適當(dāng)?shù)目蛻?hù)端:能夠處理異步事件的行編輯 -
從 select(2) 切換到更高級(jí)的 API -
用于聊天的簡(jiǎn)單對(duì)稱(chēng)加密
怎么樣?一個(gè)有趣的開(kāi)源項(xiàng)目就這樣誕生了。好了,今天的分享就到這里。最后,老規(guī)矩,奉上開(kāi)源地址,感興趣的可以去圍觀代碼。
-
https://github.com/antirez/smallchat
歡迎關(guān)注公眾號(hào):TJ君,訂閱每日推薦,獲取更多好用效率工具!
往期推薦
點(diǎn)擊下方卡片,關(guān)注公眾號(hào)“TJ君”
每天了解一個(gè)牛x、好用、有趣的東東
