對(duì)于云端編程只损,我想大多數(shù)人的第一想法應(yīng)該是微軟推出的 VSCode Remote辕漂,這個(gè)功能基于開源的 VSCode,通過 SSH 遠(yuǎn)程連接到服務(wù)器曾雕,開發(fā)者可以通過端口轉(zhuǎn)發(fā)、SCP 等一系列實(shí)用功能快速實(shí)現(xiàn)遠(yuǎn)程開發(fā)助被。我曾體驗(yàn)過這種編程方式剖张,極大減輕了電腦性能的壓力切诀,但我認(rèn)為這并不是云端編程的最終形態(tài),因?yàn)槲胰匀恍枰谧约旱碾娔X上安裝 VSCode 才可以使用這個(gè)功能搔弄。
最近 2021 款的 iPad Pro 上市了幅虑,這次搭載的是和 Mac 同款的 M1 芯片,性能強(qiáng)大到甚至有讓人利用 iPad 編程的想法顾犹,只是迫于各大廠商沒有推出適配 iPad 的 IDE倒庵,便也只能淪為“買錢生產(chǎn)力,買后愛奇藝”的工具了炫刷。那么有沒有什么辦法可以在不安裝 IDE 的情況下使用 iPad 編程嗎擎宝?自然是有的,JetBrains 公司提出了一種新的解決方案:把 IDE 搬進(jìn)瀏覽器里浑玛。這便是本文的主角——JetBrains Projector绍申。
發(fā)展
提起 JetBrains,你會(huì)想到什么锄奢?各路強(qiáng)大的 IDE失晴,比如 Android Studio、IDEA拘央、WebStorm……這些對(duì)于開發(fā)者來說耳熟能詳?shù)漠a(chǎn)品都出自這家公司涂屁,這些 IDE 的功能強(qiáng)大,但同時(shí)也只能運(yùn)行在用戶自己的電腦上灰伟,其“內(nèi)存黑洞”的稱號(hào)更是讓開發(fā)者們又愛又恨拆又。
事實(shí)上,目前所有的 JetBrains IDE 都使用 Java Swing 繪制 UI栏账,其他基于 IntelliJ 的 IDE 也是如此帖族,比如 Android Studio。鑒于 Swing 是 Java GUI 的一個(gè)庫(kù)挡爵,而 Java 本身就是一門很吃內(nèi)存的編程語言竖般,雖然可以充分利用 Java 跨平臺(tái)的特性,這也是這些 IDE 在 macOS茶鹃、Windows 和 Linux 上 UI 幾乎一致的原因涣雕。但現(xiàn)在,Swing 跨桌面平臺(tái)的特性卻也成為阻礙其發(fā)展的一個(gè)原因了闭翩,在一些瘦客戶端的情況下挣郭,“內(nèi)存黑洞”屢屢被人詬病,Swing 也無法發(fā)揮其優(yōu)勢(shì)疗韵,于是 Projector 便應(yīng)運(yùn)而生了兑障。
橫向比較
JetBrains Projector 是 JetBrains 提出的“遠(yuǎn)程開發(fā)”解決方案,基于 Client + Server 架構(gòu),雖然對(duì)標(biāo)的是微軟 VSCode 的Remote Development方案流译,但是二者的原理和體驗(yàn)效果還是相差很多的逞怨。
- VSCode 通過 SSH 等技術(shù),只傳輸代碼先蒋、索引等數(shù)據(jù)骇钦,僅將計(jì)算勻給服務(wù)器,而渲染顯示等還是依賴本地的 VSCode 客戶端竞漾,這種情況下眯搭,你仍然需要安裝 VSCode。
- Projector 改動(dòng)了 Swing 的渲染機(jī)制业岁,通過網(wǎng)絡(luò)傳輸渲染指令鳞仙,最終使用 Web 技術(shù)將界面展現(xiàn)出來。這樣做的好處是笔时,你可以直接使用瀏覽器訪問安裝在服務(wù)器上的 IDEA棍好。
筆者在查閱資料的過程中發(fā)現(xiàn),經(jīng)常有很多人將這兩者弄混允耿,通過上述內(nèi)容借笙,相信你也有一個(gè)直觀的感受了,這兩者使用體驗(yàn)的差距類似于VNC 與 SSH之間使用體驗(yàn)的差距较锡。因此筆者認(rèn)為這其實(shí)是對(duì)于「云端編程」的兩種不同的解決方案业稼,針對(duì)的使用場(chǎng)景雖有交叉,但很多情況下是不一樣的蚂蕴,因此并不會(huì)有哪一方會(huì)完全取代另一方的情況出現(xiàn)低散。
使用場(chǎng)景
既然上文已經(jīng)提到了,JetBrains Projector 和 VSCode Remote 的使用場(chǎng)景并不相同骡楼,那這一節(jié)就來簡(jiǎn)單說說 Projector 特別適合解決的問題:
- 在運(yùn)行時(shí)或數(shù)據(jù)庫(kù)附近運(yùn)行代碼以減少往返次數(shù)熔号。
- 高度安全的企業(yè)環(huán)境。
- 真正的大型項(xiàng)目鸟整。
- 禁止源代碼本地復(fù)制引镊。
- 用戶硬件約束。
- 瘦客戶端篮条。
- 需要在 Windows 機(jī)器甚至是 ChromeOS 等非傳統(tǒng)操作系統(tǒng)上的 GNU/Linux 環(huán)境中運(yùn)行 IDE弟头。
- 需要在關(guān)閉計(jì)算機(jī)后讓應(yīng)用在服務(wù)器上繼續(xù)運(yùn)行。
- 遠(yuǎn)程調(diào)試服務(wù)器端(devtest兑燥、devprod)。
- 具有調(diào)試源和預(yù)配置 IDE 的VM 或 Docker 映像琴拧。
- 需要遠(yuǎn)程訪問的配置降瞳。
Note:Projector 不支持協(xié)作開發(fā)。
初體驗(yàn)
前文說了 JetBrains Projector 是基于 Client + Server 架構(gòu)的,因此為了體驗(yàn) Projector挣饥,我們需要分別安裝 Client 端和 Server 端除师。
Server 端
官方給出了三種搭建 Server 端的方式,分別是:
- Docker 鏡像:Docker 是在云環(huán)境中運(yùn)行 Projector 的最簡(jiǎn)單的方法扔枫,需要額外安裝 Docker 環(huán)境汛聚。不需要額外安裝 IDEA,如果只是為了體驗(yàn)短荐,推薦該方式倚舀。
- Python 腳本:通過 PyPi 安裝,這是一個(gè)獨(dú)立的發(fā)行版忍宋,目前僅適用于 GNU/Linux 主機(jī)痕貌。
-
IDE 插件:需要有圖形界面的電腦支持并運(yùn)行 Jetbrains IDE,通過安裝 Projector 插件來作為服務(wù)端糠排。
PS:個(gè)人覺得第三種方式有多此一舉的嫌疑舵稠,既然遠(yuǎn)程服務(wù)器都已經(jīng)具備圖形界面了,那我直接使用 VNC 不就好了嗎入宦?
搭建過程很簡(jiǎn)單哺徊,這里選擇 Docker 搭建 Projector 服務(wù),直接選擇以下幾個(gè)命令安裝指定 IDE 即可
docker pull registry.jetbrains.team/p/prj/containers/projector-clion
docker pull registry.jetbrains.team/p/prj/containers/projector-datagrip
docker pull registry.jetbrains.team/p/prj/containers/projector-goland
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-u
docker pull registry.jetbrains.team/p/prj/containers/projector-phpstorm
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-c
docker pull registry.jetbrains.team/p/prj/containers/projector-pycharm-p
docker pull registry.jetbrains.team/p/prj/containers/projector-webstorm
例如乾闰,這個(gè)代碼段可以拉取 IntelliJ IDEA Community Edition:
docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c
然后運(yùn)行鏡像落追,執(zhí)行以下命令,將<IMAGE_ID>換成剛剛下載完成的鏡像 ID 即可汹忠。
docker run --rm -p 8887:8887 -it <IMAGE_ID>
出現(xiàn)以下內(nèi)容說明 Server 端安裝成功 ??
Client 端
JetBrains 官方給出兩種 Client 端的使用方式淋硝,一種是直接通過瀏覽器訪問,另一種是使用官方開發(fā)的客戶端宽菜。
官方客戶端的地址在:https://github.com/JetBrains/projector-client
瀏覽器訪問
我們先通過瀏覽器訪問http://localhost:8887/谣膳,同意 Policy 后便可以看到如下頁面 ??
顯示效果和本地的 IDEA 幾乎沒有差別,當(dāng)然了铅乡,使用體驗(yàn)也還是和服務(wù)器的性能有很大關(guān)系继谚。
官方 Client App
我們打開官方提供的客戶端后填入剛才的地址便會(huì)顯示同樣的效果。
在簡(jiǎn)單閱讀了這個(gè)官方 App 的源碼后發(fā)現(xiàn)這個(gè) Desktop App 其實(shí)是基于 Electron 的阵幸,有趣的是花履,雖然使用的是自家的 Kotlin 語言編寫,但不知道為什么不順便使用自家的Compose for Desktop挚赊。
瀏覽器訪問的一些缺點(diǎn)
雖然通過官方 App 使用 Projector 很方便诡壁,但說到底我還是要下載一個(gè)應(yīng)用程序,既然都這樣了荠割,和 VSCode Remote 也沒什么區(qū)別妹卿,我為什么不直接使用瀏覽器訪問呢旺矾?
其實(shí)官方文檔中已經(jīng)針對(duì)這個(gè)疑問做了詳細(xì)的說明:
- iPad 不支持 self-signed WebSockets,即不安全的 Websockets 連接(較新的安卓其實(shí)也不支持)夺克,因此想利用 iPad 訪問局域網(wǎng)內(nèi)的 Projector 會(huì)有些麻煩箕宙,當(dāng)然了,你給服務(wù)器添加 HTTPS 訪問也是可以的铺纽。
- 一些快捷鍵會(huì)被瀏覽器攔截柬帕,例如,Windows/Linux 中的 Ctrl+Q 或 Mac 中的 Cmd+N 是由瀏覽器處理的狡门。這可能會(huì)導(dǎo)致你在使用 Projector 無法使用一些快捷鍵陷寝。
- 剪切板不同步,服務(wù)端的剪切板會(huì)有一些限制融撞,使得開發(fā)過程中的復(fù)制與粘貼會(huì)出現(xiàn)一些問題盼铁。
也正是因?yàn)樯鲜鲞@些問題,官方才推出了自己的客戶端 App尝偎。
頭腦風(fēng)暴——VSCode on Browser
通過上述的介紹饶火,相信你對(duì) JetBrains Projector 已經(jīng)有了一定的了解了,其原理就是改變 Swing 的渲染方式致扯,使其最終可以使用 Web 技術(shù)將界面展現(xiàn)出來肤寝。
這時(shí)候,我們可以頭腦風(fēng)暴一下抖僵,既然 VSCode 基于的 Electron 技術(shù)本質(zhì)上是讓運(yùn)行在瀏覽器中的網(wǎng)頁可以順暢的運(yùn)行在桌面端鲤看,那么是不是可以進(jìn)行一個(gè)“逆向”,將運(yùn)行在桌面的 VSCode 反向運(yùn)行在瀏覽器中呢耍群?這種方式的思路不同于 VSCode Remote义桂,反而和 JetBrains Projector 有些類似,答案當(dāng)然是可以的蹈垢,國(guó)外也已經(jīng)有大神將源碼開源出來了慷吊,詳情參考 ??https://github.com/cdr/code-server,這里就不再多說了曹抬,感興趣的讀者們可以自行查閱相關(guān)資料溉瓶。
最后
先前我曾在《云游戲在革誰的命?》一文中討論過云游戲?qū)τ趥鹘y(tǒng)游戲的影響以及是否會(huì)取代 PC 游戲谤民,其實(shí)云端編程和云游戲類似堰酿,都需要高速且穩(wěn)定的網(wǎng)絡(luò),在這個(gè)萬物上云的時(shí)代张足,只有解決了這兩點(diǎn)才可以真正將云游戲和云編程推廣触创,我相信這一天很快就會(huì)到來。
以上就是本篇文章的全部?jī)?nèi)容了为牍,如果覺得對(duì)你有所幫助哼绑,不妨點(diǎn)個(gè)贊顺饮,新來的讀者不妨給個(gè)關(guān)注支持一下,你們的支持是我繼續(xù)更文的最大動(dòng)力凌那。