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

程式猿DD發表於2023-11-04

中午時候,在技術交流群裡聊起關於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。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章