Redis創始人開源最小聊天服務器,僅200行代碼,幾天功夫已獲2.8K Star!

中午時候,在技術交流羣裏聊起關於Redis創始人的一些趣事,比如離開Redis之後,去寫科幻小說之類的。

因爲好奇科幻小說,TJ君就去搜索了一下。結果一搜,發現Redis作者最近居然又搞了個新活兒!

世界上最小的聊天服務器

這次Redis作者的新開源項目名叫:SmallChat。 從關於內容中可以知道,這個開源項目是要打造最小的聊天服務器。

從開源項目的內容中來看,確實如此,就下面這些:

代碼部分除去大量註釋之後,更是驚人的只有200+行代碼,可以說真的是做到了極致的精簡。

起源與未來

在該項目的README中,目前還沒有更多關於該項目的使用說明,更多的是關於該項目的背景和未來展望。

內容也是非常值得大家細品,TJ君從中感受到一名優秀開發者的思維模式,是非常值得大家去學習的。我們也可以去多學習這種思維方式,來多創造一些更有意思的東西。

下面一起來看看他的故事:

昨天和幾個朋友聊天,大部分都是前端開發人員,離系統編程有點遠。我們正在回憶 IRC 的舊時光。我說道:編寫一個非常簡單的 IRC 服務器是每個人都應該做的經歷(我向他們展示了我用 TCL 編寫的實現;我很震驚我在 18 年前寫了它:時間過得很快)。這樣的程序中有一些非常有趣的部分。單個進程執行多路複用、獲取客戶端狀態並在客戶端擁有新數據後嘗試快速訪問此類狀態,等等。

但後來討論發生了變化,我想,我將向您展示一個用 C 編寫的非常簡單的示例。您可以編寫的最小的聊天服務器是什麼?爲了真正做到最小化,我們不應該需要任何合適的客戶。即使不是很好,它也應該與 telnet 或者 netcat 一起使用。服務器的主要操作只是接收一些聊天行並將其發送到所有其他客戶端,有時稱爲扇出操作。然而,這需要適當的功能,然後是緩衝等等。我們希望它更簡單:讓我們使用內核緩衝區進行欺騙,並假裝我們每次都從客戶端收到完整的行(這個假設在實踐中通常是正確的,所以事情還算有效)。

好吧,通過這些技巧,我們可以實現一個聊天,甚至能夠讓用戶在短短 200 行代碼中設置他們的暱稱(當然,刪除空格和註釋)。因爲我寫了這個小程序作爲給我的朋友們的例子,所以我決定也將它推送到 GitHub 上。

關於未來的工作:

在接下來的幾天裏,我將繼續修改這個程序,以使其進化。不同的演變步驟將根據我的寫作系統軟件系列的 YouTube 劇集(涵蓋此類變化)進行標記。這是我的計劃(可能會改變,但或多或​​少這就是我想要涵蓋的內容):

  • 實現讀和寫的緩衝
  • 避免使用線性數組,使用字典數據結構來保存客戶端狀態
  • 編寫適當的客戶端:能夠處理異步事件的行編輯
  • 從 select(2) 切換到更高級的 API
  • 用於聊天的簡單對稱加密

怎麼樣?一個有趣的開源項目就這樣誕生了。好了,今天的分享就到這裏。最後,老規矩,奉上開源地址:https://github.com/antirez/smallchat , 感興趣的可以去圍觀代碼。

歡迎關注我的公衆號:程序猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章