npm 包 @jimpick/distjs-dat 使用教程

阅读时长 10 分钟读完

简介

npm 包 @jimpick/distjs-dat 是一个提供 de-centralized web 服务的 JavaScript 库。它基于 Hypercore Protocol 构建,用于在多个节点之间同步数据。

它提供了一个优雅的接口,使得在 de-centralized web 上创建和共享数据变得非常简单。它也可以帮助一些开发人员只使用少量代码即可在 P2P 网络中同步数据。

在本文中,我们将介绍如何使用 @jimpick/distjs-dat。

安装

使用 npm 进行安装:

使用

在我们介绍如何使用 @jimpick/distjs-dat 前,首先需要了解一些基础概念。

Hypercore Protocol

Hypercore Protocol 是 @jimpick/distjs-dat 的基础。它使用基于哈希的 P2P 网络协议,通过 TCP/IP 连接将数据同步到不同的节点。

Hypercore Protocol 的核心概念是 hypercore,它是一个类似于数组的数据结构,可以由许多节点共享。我们可以使用 hypercore 进行数据存储和同步。与 IPFS 不同,Hypercore Protocol 是只写的,每个 hypercore 只能由一个用户写入。

DatArchive

DatArchive 是一个用于访问 hypercore 数据的接口,类似于访问本地文件系统。

一个 DatArchive 除了可以添加、删除、更新文件,还可以被许多节点同时共享。所有的修改将会被同步到其他节点,即使你的设备没有联网也不会影响 sync。

这跟 Git 的方式非常相似,如果你熟悉 Git,对于 @jimpick/distjs-dat 的使用可能就更加得心应手了。

初始化 DatArchive

要初始化一个 DatArchive ,只需要使用如下命令:

-- -------------------- ---- -------
----- --- - -------------------

------------------ -------- ----- ---- -
  -- ----- ----- ---

  --- ------- - -----------

  ------------------------------ -------- ----- ----- -
    ----------------- -- ------- -------- -- --- ---- -- -------
    ------------------------ -- ------- --- --- -- --- -------
  --
--

./my-folder 是存储本地数据的文件夹。在这个例子中,数据将被存储在 ./my-folder 目录下。

你可以使用 archive.writeFile 写入一个文件到本地数据中。

共享数据

我们需要创建两个不同的 DatArchive,来演示如何在两个 DatArchive 之间共享数据。使用 Dat 函数初始化两个不同的 DatArchive:

-- -------------------- ---- -------
--------------------- -------- ----- ----- -
  -- ----- ----- ---

  -- --- - ---- -- ----
  --- -- - -----------------------------------------------
  ------------- ----------

  --- ---- - ----------------

  --------------------- ----- ---------- -------- ----- ----- -
    -- ----- ----- ---

    -- ---- - ---- ---- ----
    ---------------------------------- -------- ----- ----- -
      ---------------------------- -- ------- ------ -------

      --- ---- - ----------------

      -- --- --- ---- ------ -- --- ----
      -----------------
      -----------------
    --
  --
--

在这个例子中,我们创建了两个不同的 DatArchive:dat1dat2

我们向dat1中添加了一个文件:Hello World!

使用Dat函数初始化dat2并通过dat1.key参数让dat2知道本地需要与哪个HypercoreProtocol节点同步数据。

现在,我们就可以使用dat2获取到dat1中保存的数据。

Hyperdrive

Hyperdrive是一个建立在HypercoreProtocol之上的高级协议。它提供了使用file路径和directory路径在分布式系统中使用文件夹和文件的能力。

Hyperdrive有时候表现得比DatArchive更好。

初始化一个Hyperdrive需要使用Hyperdrive函数。如下所示:

./my-folder是本地存储应用数据的目录。

一旦你调用了Hyperdrive函数,它会返回一个drive,你就可以使用drive读/写数据了。

现在你就可以使用 writeFilereadFile 函数来读写数据了。这些函数的调用方式和DatArchive是一样的。在下面的示例中,我们使用writeFile向 Hyperdrive 写入一个文件。

处理文件和文件夹

Hyperdrive使用 Unix 风格的路径,我们可以使用路径名来访问文件和目录。根目录以/开头。使用mkdir函数来创建目录:

-- -------------------- ---- -------
-- ------ ---------
--------------------- ------------- -
  -- ----- ----- ---
  ---------------------- ----------
--

-- ------ ------ ---------
--------------------------- ----------- ------ ------------- -
  -- ----- ----- ---
  ------------------- --------- ----------
--

删除文件或文件夹可以使用unlinkrmdir函数。

-- -------------------- ---- -------
-- ------ ----
------------------------ ------------- -
  -- ----- ----- ---
  ----------------- ----------
--

-- ------ ---------
--------------------- ------------- -
  -- ----- ----- ---
  ---------------------- ----------
--

使用 metadata 和 Extended Attributes (xattrs)

Hyperdrive支持元数据和扩展文件属性(xattrs),以保存文件的额外信息。

当你小时,你可以通过创建一个对象并将其传递给metadata参数来设置元数据。如果你需要设置有关特定文件的附加信息,比如时间戳或作者等等,那么这个特性就非常有用。

-- -------------------- ---- -------
---------------------- -------- ----- -
  -- ----- ----- ---
  ---------------------------------- ----- ------ -------- ----- -
    -- ----- ----- ---

    ----- ------------ - -
      ------- --------
      ----------- ----------
    -
    --------------------------------- ------------- -------- ----- -
      -- ----- ----- ---

      ----------------------------- -------- ----- ----- -
        -- ----- ----- ---

        -------------------------- -- - ------- -------- ----------- ------------- -
      --
    --
  --
--

如果你想要删除元数据,你只需要将metadata参数传递给null

和元数据一样,你也可以设置一个文件的 xattrs。具体实现方式也类似于元数据的设置。你需要将所需的 xattrs 作为一个对象传递给xattrs参数:

-- -------------------- ---- -------
----- ------ - -
  ---------- ----------------------
  ------- -------
-

---------------------------- ------ -------- -------- ----- -
  -- ----- ----- ---
  ------------------------------ ------- -------- ----- -
    -- ----- ----- ---

    ------------------------------ -------- ----- --------- -
      -- ----- ----- ---

      ---------------------------- -- - ---------- ---------------- ------- ------- -
    --
  --
--

-- -- ------ ------- --- ---- -- ----
------------------------------ -------- ------ -------- ----- -
  -- ----- ----- ---
  ------------------- ---------
--

在上面这个例子中,我们在drive中设置了一个 xattr,并将xattrs参数设为以下值:

然后,我们使用setMetadata函数将这个xattrs设置为一个文件。如果xattrs设置为null,则用来存储 xattrs 的空间将被释放。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005726681e8991b448e8983

纠错
反馈