Gopher:送給 Redis 的禮物
原文由 Salvatore Sanfilippo 于 發布,訂閱此部落格
十年前,Redis 在 Hacker News 上首次發布,我便以此作為這個專案的虛擬生日,原因很簡單:向大眾公開的那一刻,遠比寫下第一行程式碼的實際日期更重要(想想動物的受孕與真正出生之間的差別)。我就以 Redis 滿十週年為藉口,來發布這幾天稍微玩了一下、原本想留到四月一日愚人節再拿出來的東西:但那個日子還很遠,我現在就想跟大家聊聊這個專案……所以,Redis 生日快樂!這是送給你的禮物:一個 Gopher 協定的實作。
〔……此時 Redis 試圖忍住淚水,但情緒太過激動,地上散落著一堆位元(我是說 0 和 1)……〕
你現在心裡應該會自動冒出一句:你到底在說什麼鬼?!在 2019 年談 Gopher 聽起來有點奇怪。不過,它也不 *完全* 是個玩笑,雖然很大程度上確實是個玩笑。畢竟整個實作扣掉用來把頁面轉成 Redis key 的外部工具,也就只有 100 行程式碼而已。但……重點是,Gopher 周圍真的有一個活躍的社群,規模很小,但在最近這幾年、幾個月裡卻在逐漸成長。有些人覺得網路已經不再是以前的樣子。有太多管控、企業追蹤、留言、按讚、轉推,多到內容不再是王道。寫點新東西,紅個五小時就消失了。再也沒有一場討論能存活超過幾分鐘而不演變成某種筆戰,除非所有參與者都自我審查掉每一種可能的情緒、不自在的字眼和信念,審到讓討論本身變得毫無用處。最後,為了載入一篇只有 1k 文字的爛頁面,你得載入 50 個 JavaScript 檔案,看著螢幕閃爍,只因為客戶端渲染很酷,諸如此類。
另一方面,Gopher 是一個純文字協定,很適合用來傳遞純文字文件,重點完全在於你寫了什麼。但如果只談這個,那就成了戀物癖了,對我來說,Gopher 的殺手鐧在於它很不酷。不酷到就我所知,它將永遠是一個另類現實,讓某些人可以決定與眾人分離,去體驗一種不同的做事方式,更像是 BBS 的舊時代或網路最初那幾年的感覺。一個多數人根本不會想去、只為了用 80 欄等寬字體閱讀宅味十足內容的地方。
在 Gopher 上你要做的,就是打造你的 Gopher hole,也就是你在 Gopher 宇宙中的空間,基本上就像你在網際網路上的網站一樣。做這件事的工具本來就不少,但 Redis 在幾個方面還挺不錯的:你可以即時修改 Redis 的 key 來改變網站內容,這很方便。你可以利用 replication 來複製整個站台,甚至只要把 RDB 檔案存下來,就能完整備份整個 Gopher hole,作為備份或留作歷史紀錄。
這個 Redis Gopher 的構想是與 FreakNet 合作完成的,這是在卡塔尼亞一個具有歷史意義的駭客實驗室經驗。https://it.wikipedia.org/wiki/FreakNet。這些傢伙做了很多有趣的事,包括在帕拉佐洛阿克雷德這裡的一個復古電腦硬體博物館計畫:https://museo.freaknet.org/en/。
它是怎麼運作的?
其實很簡單,我劫持了 inline 協定,特別是兩種本來就不合法的 inline 請求:空請求,或任何以「/」開頭的請求(沒有任何 Redis 指令是以這種斜線開頭的)。正常的 RESP2/RESP3 請求則完全不會經過 Gopher 協定的實作路徑,依然會照常處理。如果你連上已啟用 Gopher 的 Redis 並傳送像「/foo」這樣的字串,只要存在一個名為「/foo」的 key,就會透過 Gopher 協定來提供內容。整個實作只有 100 行程式碼。一開始我曾想過要用資料結構並做語意轉換來對應 Gopher 的型別,但那樣只是徒增複雜、毫無用處。
所以我做的,反而是提供一個在 Redis 上編寫 Gopher 的工具,你可以在這裡找到它:
https://github.com/antirez/gopher2redis
想看看那個跑在 Redis 實例上的 Gopher hole 範例,只要連到 gopher://gopher.antirez.com 就好,順帶一提,這也會是我在未來幾天內建好自己的 Gopher hole 之後的位址。P.S. 我建議使用 Lynx 這個純文字的網頁/Gopher 瀏覽器來存取 Gopher。
Gopher 支援預設是關閉的,要啟用它的話,請使用 Redis 的 unstable 分支,並將「gopher-enabled」選項設為 yes。不過請務必同時為 Redis 設定密碼保護:Gopher 協定仍會提供內容,但同時一般的 Redis 指令將無法存取。這樣一來(假設你的實例中除了 Gopher 的 key 之外沒有其他要暴露的資料),你就可以把這個實例公開,當作一個真正的 Gopher 伺服器來使用。
好了,祝大家玩 Gopher 愉快!我希望這個 Gopher 計畫能繼續發展下去,我真心相信我們之中有些人需要在現代網路的混亂之外,打造一個社群。不,這不代表要完全與世隔絕。舉例來說,我並不打算停止寫部落格或使用網路。但某些更慢、更高品質的交流,確實需要一個得以茁壯的地方。
隨機一篇部落格
留言
登入後參與討論