用 Git 作為聊天應用的後端
GIC 是一個聊天應用程式的原型,展示了一種使用 Git 的新方法。
Git 是一個少有的能將如此多的現代計算封裝到一個程式之中的應用程式,它可以用作許多其他應用程式的計算引擎。雖然它以跟蹤軟體開發中的原始碼更改而聞名,但它還有許多其他用途,可以讓你的生活更輕鬆、更有條理。在這個 Git 系列中,我們將分享七種鮮為人知的使用 Git 的方法。
今天我們來看看 GIC,它是一個基於 Git 的聊天應用。
初識 GIC
雖然 Git 的作者們可能期望會為 Git 建立前端,但毫無疑問他們從未預料到 Git 會成為某種後端,如聊天客戶端的後端。然而,這正是開發人員 Ephi Gabay 用他的實驗性的概念驗證應用 GIC 所做的事情:用 Node.js 編寫的聊天客戶端,使用 Git 作為其後端資料庫。
GIC 並沒有打算用於生產用途。這純粹是一種程式設計練習,但它證明了開源技術的靈活性。令人驚訝的是,除了 Node 庫和 Git 本身,該客戶端只包含 300 行程式碼。這是這個聊天客戶端和開源所反映出來的最好的地方之一:建立在現有工作基礎上的能力。眼見為實,你應該自己親自來了解一下 GIC。
架設起來
GIC 使用 Git 作為引擎,因此你需要一個空的 Git 儲存庫為聊天室和記錄器提供服務。儲存庫可以託管在任何地方,只要你和需要訪問聊天服務的人可以訪問該儲存庫就行。例如,你可以在 GitLab 等免費 Git 託管服務上設定 Git 儲存庫,並授予聊天使用者對該 Git 儲存庫的貢獻者訪問許可權。(他們必須能夠提交到儲存庫,因為每個聊天訊息都是一個文字的提交。)
如果你自己託管,請建立一箇中心化的裸儲存庫。聊天中的每個使用者必須在裸儲存庫所在的伺服器上擁有一個帳戶。你可以使用如 Gitolite 或 Gitea 這樣的 Git 託管軟體建立特定於 Git 的帳戶,或者你可以在伺服器上為他們提供個人使用者帳戶,可以使用 git-shell
來限制他們只能訪問 Git。
自託管例項的效能最好。無論你是自己託管還是使用託管服務,你建立的 Git 儲存庫都必須具有一個活躍分支,否則 GIC 將無法在使用者聊天時進行提交,因為沒有 Git HEAD。確保分支初始化和活躍的最簡單方法是在建立儲存庫時提交 README
或許可證檔案。如果你沒有這樣做,你可以在事後建立並提交一個:
$ echo "chat logs" > README
$ git add README
$ git commit -m 'just creating a HEAD ref'
$ git push -u origin HEAD
安裝 GIC
由於 GIC 基於 Git 並使用 Node.js 編寫,因此必須首先安裝 Git、Node.js 和 Node 包管理器npm(它應該與 Node 捆綁在一起)。安裝它們的命令因 Linux 或 BSD 發行版而異,這是 Fedora 上的一個示例命令:
$ sudo dnf install git nodejs
如果你沒有執行 Linux 或 BSD,請按照 git-scm.com 和 nodejs.org 上的安裝說明進行操作。
因此,GIC 沒有安裝過程。每個使用者(在此示例中為 Alice 和 Bob)必須將儲存庫克隆到其硬碟驅動器:
$ git clone https://github.com/ephigabay/GIC GIC
將目錄更改為 GIC 目錄並使用 npm
安裝 Node.js 依賴項:
$ cd GIC
$ npm install
等待 Node 模組下載並安裝。
配置 GIC
GIC 唯一需要的配置是 Git 聊天儲存庫的位置。編輯 config.js
檔案:
module.exports = {
gitRepo: 'seth@example.com:/home/gitchat/chatdemo.git',
messageCheckInterval: 500,
branchesCheckInterval: 5000
};
在嘗試 GIC 之前測試你與 Git 儲存庫的連線,以確保你的配置是正確的:
$ git clone --quiet seth@example.com:/home/gitchat/chatdemo.git > /dev/null
假設你沒有收到任何錯誤,就可以開始聊天了。
用 Git 聊天
在 GIC 目錄中啟動聊天客戶端:
$ npm start
客戶端首次啟動時,必須克隆聊天儲存庫。由於它幾乎是一個空的儲存庫,因此不會花費很長時間。輸入你的訊息,然後按Enter鍵傳送訊息。
基於 Git 的聊天客戶端。 他們接下來會怎麼想?
正如問候訊息所說,Git 中的分支在 GIC 中就是聊天室或頻道。無法在 GIC 的 UI 中建立新分支,但如果你在另一個終端會話或 Web UI 中建立一個分支,它將立即顯示在 GIC 中。將一些 IRC 式的命令加到 GIC 中並不需要太多工作。
聊了一會兒之後,可以看看你的 Git 儲存庫。由於聊天發生在 Git 中,因此儲存庫本身也是聊天日誌:
$ git log --pretty=format:"%p %cn %s"
4387984 Seth Kenlon Hey Chani, did you submit a talk for All Things Open this year?
36369bb Chani No I didn't get a chance. Did you?
[...]
退出 GIC
Vim 以來,還沒有一個應用程式像 GIC 那麼難以退出。你看,沒有辦法停止 GIC。它會一直執行,直到它被殺死。當你準備停止 GIC 時,開啟另一個終端選項卡或視窗併發出以下命令:
$ kill `pgrep npm`
GIC 是一個新奇的事物。這是一個很好的例子,說明開源生態系統如何鼓勵和促進創造力和探索,並挑戰我們從不同角度審視應用程式。嘗試下 GIC,也許它會給你一些思路。至少,它可以讓你與 Git 度過一個下午。
via: https://opensource.com/article/19/4/git-based-chat
作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
相關文章
- Git的基本應用Git
- React/Vue 實現的前端應用, java/Go/Python 實現的後端應用,前後端分離的應用部署的最佳實踐ReactVue前端JavaGoPython後端
- Android端實現多人音視訊聊天應用(一)Android
- 實戰:用“廉價”的NFS作為K8S後端儲存NFSK8S後端
- Git應用詳解第七講:Git refspec與遠端分支的重要操作Git
- Git應用詳解第六講:Git協作與Git pull常見問題Git
- 一款極簡的聊天應用
- Electron11模仿QQ+微信桌面端聊天|vue3.x+antdv+electron跨端聊天應用Vue跨端
- 後端應用分層經驗總結後端
- 基於Flutter的仿微信聊天應用Flutter
- MapReduce如何作為Yarn應用程式執行?Yarn
- git submodule 子模組應用Git
- 用於ONNX的TensorRT後端後端
- 採用GIT作為版本控制與線上程式碼釋出Git
- AI實用指南:5分鐘搭建你自己的LLM聊天應用AI
- Vue作為元件在前端專案中的應用技巧Vue元件前端
- [譯] 為你的 React 應用製作 SVG 圖示庫ReactSVG
- 啟用遠端系統上的應用
- 後門戰爭:端到端加密聊天如何成為安全逆鱗?加密
- Linux 安裝配置應用- GitLinuxGit
- git 和 gitlub 中應用整理Git
- 如何在Spring Boot應用程式中啟用GZIP壓縮? | 前端後端Spring Boot前端後端
- Android端實現多人音視訊聊天應用(二):多人視訊通話Android
- nuxt作為主應用接入qiankun的實踐(附程式碼)UX
- 使用NFS作為Glance儲存後端NFS後端
- Vue3.0+Electron聊天室|electron跨平臺仿QQ客戶端|vue3.x聊天應用Vue客戶端
- Laravel後臺作為客戶端,socket.io作為服務端,App或其他作為另一個客戶端Laravel客戶端服務端APP
- 一文讀盡前端路由、後端路由、單頁面應用、多頁面應用前端路由後端
- 聊天室應用開發實踐(一)
- 基於 Flutter+Dart 仿微信 App 聊天應用|flutter 聊天介面FlutterDartAPP
- 在IIS中部署前後端應用,多麼痛的領悟!後端
- ADFS 部署資料庫AlwaysOn後應用端的連線字串更改資料庫字串
- 用gpt直接寫後端的感覺GPT後端
- 使用Java後端對Angular應用進行Docker化 -BhargavJava後端AngularDocker
- 火爆的音訊聊天應用Clubhouse音訊恐洩露音訊
- 前後端分離,後端用springboot遇到的跨域問題後端Spring Boot跨域
- 開源專案:採用 Laravel 編寫的一個聊天應用 Laravel-ChatLaravel
- Redis In Action 筆記(六):使用 Redis 作為應用程式元件Redis筆記元件