開發
用 C# 編寫筆記本
筆記本是一個派生自 NotebookApplication 並重寫 Build 的類。它的成員是每位存取者各自一份的,與文件的資料成員完全一樣:
using Divooka.Application.Notebook;
using Divooka.Application.Notebook.Framework;
public class Greenhouse : NotebookApplication
{
public double Temperature { get; set; }
protected override void Build()
{
Site("Greenhouse");
Page("Yield");
Markdown("# Crop yield");
Slider("Temperature (°C)", 0, 40, 24, t => { Temperature = t; return $"{t} °C"; });
TextBox("Region", "North", region => NotebookOutputs.Markdown($"**{region}** at {Temperature} °C"));
}
}
NotebookApplicationProvider provider = new(new Greenhouse(), () => new Greenhouse());
await using NotebookHost host = await NotebookHost.StartAsync(provider, new NotebookHostOptions { Address = "127.0.0.1:5080" });
提供程式會獲得站點自己的例項,以及為每位存取者建立另一個例項的方法;由 Compute 或 dvn 執行的文件,這兩者都由框架提供。
包
| 包 | 說明 |
|---|---|
Divooka.Application.Notebook.Application |
NotebookApplication、儲存格和輸出值。不引用任何 Web 庫,因此筆記本文件自身的引用保持精簡。 |
Divooka.Application.Notebook.Framework |
驅動程式、NotebookHost、NotebookApplicationProvider、從 Divooka 值到輸出的對映,以及自檢功能。 |
Divooka.Application.Notebook |
ASP.NET Core 伺服器,內嵌頁面客戶端:AddDivookaNotebook 和 MapDivookaNotebook。 |
Divooka.Application.Notebook.Base |
通訊契約和提供程式介面。 |
擁有自己頁面的宿主可以實現 INotebookPagesProvider 和 INotebookSessionComputeProvider,並用 AddDivookaNotebook 和 MapDivookaNotebook 把伺服器對映到自己的應用程式中。
通訊協議
頁面通過一個小型 JSON API 與伺服器通訊。該 API 帶有版本號,因此從較舊伺服器快取的頁面會提示重新載入,而不會誤讀響應。它包括:每次頁面載入時的一次引導請求,用於建立會話;每次更改時的一次呼叫,響應內容為該儲存格的輸出以及啟用狀態的任何變化;上傳;以及頁面離開時傳送的關閉請求。它的規範見伺服器原始碼旁的 PROTOCOL.md,位於 Parcel.NExT/Packages/Divooka.Application.Notebook。
頁面客戶端
頁面使用 DivookaFrontendComponents(Divooka 生態系統共享的 React 元件)構建,並在伺服器構建時嵌入其中。因此,從原始碼構建伺服器需要 Node.js,以及位於 External/DivookaFrontendComponents 的元件克隆(External/Setup.ps1 會克隆它);構建過程會提示缺少哪一項。
測試
UnitTests/Divooka.Application.Notebook.UnitTests 在真實的環回埠上提供筆記本服務,並通過 API 驅動它們:測試存取者之間相互隔離、同一次存取內共享成員、通過編輯器會話編寫的文件以解釋和編譯兩種方式提供服務、dvn,以及隨附的示例。NOTEBOOK_CHECK=1——或 dvn --check——會讓任何筆記本存取自身一次,並列印每個儲存格的響應。