Dweb:使用安全闲聊的社交信息流

系列简介中,我们强调了让用户掌控他们在互联网上的社交互动的重要性,而不是让营利公司成为仇恨言论或骚扰的仲裁者。我们 Dweb 系列的第一期介绍了安全闲聊,它设想了一个用户完全掌控他们在互联网上社区的世界。

在接下来的几周里,我们将介绍各种项目,这些项目代表了对去中心化/分布式空间的探索。这些项目与 Mozilla 无关,其中一些项目改写了我们对网页浏览器的理解。它们有一个共同点:这些项目是开源的,并且开放参与,并与 Mozilla 的使命一致,即保持网络对所有人开放和可访问。

这篇文章由 André Staltz 撰写,他撰写大量文章,内容是关于在大量数字用户迁移到企业社交网络的情况下网页的命运,并且是闲聊项目的核心贡献者。——Dietrich Ayala

入门安全闲聊

安全闲聊 是一款免费开源社交网络,具有独特的离线优先和点对点特性。作为一名 JavaScript 开源程序员,我在两年前发现了安全闲聊,它是一个有希望的全新“社交网络”的基础,为专有平台提供了一种替代方案。主流平台的社交隐喻现在比网络更流行,成为创建和消费内容的方式。安全闲聊没有试图为移动社交时代改编现有的网页技术,而是让我们能够从头开始构建一个全新的生态系统。

本地数据库,与朋友共享

安全闲聊(SSB)协议的核心思想很简单:你的社交账户只是一个密码密钥对(你的身份)加上一个消息日志(你的信息流),存储在本地数据库中。到目前为止,这与互联网无关,它只是一个本地数据库,你的帖子按顺序存储在其中,并且允许你像使用个人日记一样编写状态更新。当这些本地信息流通过互联网或本地网络在计算机之间共享时,SSB 就变成了社交网络。该协议支持信息流的点对点复制,因此你可以拥有朋友信息流的本地(和完整)副本,并在你在线时更新它们。SSB 的一个实现,闲聊机器人,使用 Node.js 并允许 UI 应用程序与本地数据库和网络堆栈交互。

使用闲聊机器人

虽然 SSB 正在使用多种语言实现(GoRustC),但目前它的主要实现是 npm 包 scuttlebot使用闲聊机器人的 Electron 桌面应用程序。要从头开始构建自己的 UI 应用程序,你可以设置闲聊机器人加上一个本地主机 HTTP 服务器,以便在你的浏览器中渲染 UI。

运行以下npm命令将闲聊机器人添加到你的 Node.js 项目中

npm install --save scuttlebot

你可以使用闲聊机器人通过命令行界面在本地发布消息、查看消息、与朋友连接。首先,启动服务器

$(npm bin)/sbot server

在另一个终端中,你可以使用服务器在你的本地信息流中发布消息

$(npm bin)/sbot publish --type post --text "Hello world"

你还可以使用邀请码与朋友连接并复制他们的信息流。邀请码由公共服务器生成
由社区中的朋友拥有,这些朋友充当社区中信息流的镜像。使用邀请码意味着服务器将允许你连接到它,并镜像你的数据。

$(npm bin)/sbot invite.accept $INSERT_INVITE_CODE_HERE

要创建一个简单的网页应用程序来渲染你的本地信息流,你可以在 Node.js 脚本中启动闲聊机器人服务器(依赖项为 ssb-configpull-stream),并将信息流通过 HTTP 服务器提供。

// server.js
const fs = require('fs');
const http = require('http');
const pull = require('pull-stream');
const sbot = require('scuttlebot/index').call(null, require('ssb-config'));

http
  .createServer((request, response) => {
    if (request.url.endsWith('/feed')) {
      pull(
        sbot.createFeedStream({live: false, limit: 100}),
        pull.collect((err, messages) => {
          response.end(JSON.stringify(messages));
        }),
      );
    } else {
      response.end(fs.readFileSync('./index.html'));
    }
  })
  .listen(9000);

使用node server.js启动服务器,在浏览器中打开localhost:9000后,它应该提供 index.html。

<html>

<body>
  <script>
    fetch('/feed')
      .then(res => res.json())
      .then(messages => {
        document.body.innerHTML = `
          <h1>Feed</h1>
          <ul>${messages
            .filter(msg => msg.value.content.type === 'post')
            .map(msg =>
              `<li>${msg.value.author} said: ${msg.value.content.text}</li>`
            )
          }</ul>
        `;
      });
  </script>
</body>

</html>

了解更多

SSB 应用程序可以完成比社交消息传递更多的事情。安全闲聊被用于Git 协作象棋游戏管理在线聚会

通过创建或使用专门 API 或不同数据库查询方式的插件,可以在 SSB 之上构建自己的应用程序。有关如何构建自定义插件的详细信息,请参阅 secret-stack。有关如何在数据库中创建自定义索引的详细信息,请参阅 flumedb。此外,我们的 GitHub 组织中还有许多有用的存储库

要了解所有实现使用的协议,请参阅协议指南,其中解释了使用的密码原语和商定的数据格式。

最后,不要错过首页Scuttlebutt.nz,它解释了我们重视的设计决策和原则。我们强调人类在互联网社区中所扮演的重要作用,不应该将其委托给计算机。

关于 André Staltz

André Staltz 是一位开源黑客,他维护开源库并在会议和研讨会上教授 JavaScript。他是闲聊社区的核心贡献者,专注于开发第一个 Android 应用程序,以及在外部代表该社区。

André Staltz 的更多文章…


5 条评论

  1. Chris Troutner

    其他类似于安全闲聊的去中心化应用程序

    Beaker 浏览器和 Fritter(Twitter 克隆)

    OpenBazaar(可用于社交发布和打赏)

    IPFS 和 OrbitDB 使用非常相似的底层技术。

    2018 年 8 月 8 日 11:14

  2. Jeremiah

    安全闲聊与 ActivityPub 应用程序类似吗?

    2018 年 8 月 10 日 11:26

    1. Andre Garzia

      不完全是。ActivityPub 是联合的。你有多个实例交换多个用户的相关数据。因此,你可以在“实例 A”上写一条消息给“实例 B”上的用户,当你这样做时,你的客户端会写入“实例 A”(一个服务器),然后该服务器会联系“实例 B”(另一个服务器),最后将消息转发到目标用户。因此,“多个服务器上有多个用户”和“服务器到服务器通信”的范式是 ActivityPub 的核心。

      SSB 不同,没有服务器。当你想要联系一个用户时,你会写入自己的本地数据库,然后该数据库会传播给你朋友,然后传播到他们朋友,最终到达目标用户。

      这使得 SSB 完全去中心化,每个用户在自己的机器上拥有所有内容。不存在“在服务器上开户”或“服务器宕机”的概念,只有传播。

      2018 年 8 月 23 日 16:18

  3. Andre Garzia

    Andre Staltz,好文章!:D 感谢你的努力,我的朋友!

    2018 年 8 月 23 日 16:19

  4. devfreak

    感谢你花时间使网络真正去中心化。

    2018 年 9 月 4 日 03:09

本文评论已关闭。