使用 BitTorrent DHT 的去中心化信息流。灵感来自 Arvid 和 The_8472 的“DHT RSS feeds” http://libtorrent.org/dht_rss.html
BitTorrent 的 DHT 可能是互联网上最具弹性和抗审查能力的网络之一。PeerTweet 利用这个网络允许用户向所有监听者广播 推文。当你启动 PeerTweet 时,它会生成一个哈希 @33cwte8iwWn7uhtj9MKCs4q5Ax7B,类似于你的 Twitter 用户名(例如 @lmatteis)。不同之处在于,你完全控制可以发布的内容,因为只有你拥有与该地址关联的私钥。此外,得益于 DHT,你所发布的内容无法被任何政府或机构阻止。
一旦你找到其他你信任(非垃圾信息)的 PeerTweet 地址,就可以关注他们。这会配置你的客户端存储该用户的推文,并每隔一段时间将其广播到 DHT,以保持其信息流的活跃。这种关注账户的合作方式使得信息流能够在 DHT 网络中保持存活。PeerTweet 协议还会发布你的操作,例如“我刚刚关注了 @919c..”或“我刚刚点赞了 @9139..”以及“我刚刚转发了 @5789..”。这使得新用户能够找到其他可以信任的地址;如果我信任用户 @6749..,而他们关注了 @9801..,那么我或许可以将 @9801.. 标记为非垃圾信息。这种公开推文记录行为的方式也为未来对此社交图谱进行强大的爬取分析提供了可能。
PeerTweet 基本遵循 DHT RSS feed 提案 http://libtorrent.org/dht_rss.html 提供的实现指南。我们将其构建在当前的 BEP44 提案之上,该提案提供了通过 DHT 网络进行 get() 和 put() 操作的功能。这意味着,我们不仅可以利用 DHT 来宣布当前正在下载的种子,还可以用它来存入和获取少量数据(大约 1000 字节)。
PeerTweet 区分了两种类型的条目:
@lmatteis 账号)。信息流头部大致结构如下:{
"d": <从纪元到头部修改时间所经过的分钟数(无符号整数)>,
"next": <信息流中后续 4 个条目的最多 80 字节数据,分别是 1、2、3、4 跳,每跳 20 字节>,
"n": <信息流的 UTF-8 名称>,
"a": <用作头像的图片的 UTF-8 HTTP URL>,
"i": <信息流的 UTF-8 描述>
}
{
"d": <从纪元到条目创建时间所经过的分钟数(无符号整数)>,
"next": <信息流中后续 4 个条目的最多 80 字节数据,分别是 1、2、4、8 跳,每跳 20 字节>,
"t": <推文的 UTF-8 内容,最多 140 个字符>
}
条目包含指向列表中其他条目的多个指针,是为了实现并行查找。我们的跳表实现与常规实现不同,专门针对网络查找设计:每个条目包含 4 个指针,这样当我们收到一个条目时,可以并行向列表中的其他条目发出 4 个 get() 请求。这对于及时访问用户的信息流至关重要,因为 DHT 查找有不可预测的响应时间。
当你关注某人时,本质上是在告知你的客户端下载他们的信息流并定期重新发布。DHT 网络不是持久化网络,条目在大约 30 分钟后就会迅速从网络中消失。为了保持条目的活跃,拥有大量关注者对于信息流的正常运行时间至关重要。否则,你仍然可以有一台服务器全天候运行,每 30 分钟重新发布一次条目来保持信息流存活。
安装依赖项。
$ npm install
该应用带有一些原生绑定。我是用以下代码使其在我的电脑上运行的:
来源:https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm install --save-dev electron-rebuild
# 每次运行 "npm install" 后,运行此命令
./node_modules/.bin/electron-rebuild
# 在 Windows 上如有问题,请尝试:
.\node_modules\.bin\electron-rebuild.cmd
为了让 ed25519-supercop 在 Windows 上工作,我还必须安装 node-gyp 以及 node-gyp 所需的所有 Python2.7 和 Visual Studio 组件:https://github.com/nodejs/node-gyp
然后在 Windows 上运行以下命令进行构建:
npm install -g node-gyp
cd ./node_modules/ed25519-supercop/
HOME=~/.electron-gyp node-gyp rebuild --target=0.36.9 --arch=x64 --dist-url=https://atom.io/download/atom-shell
在两个不同的控制台标签页中 同时 运行以下两个命令。
$ npm run hot-server
$ npm run start-hot
注意:需要 node 版本 >= 4 和 npm 版本 >= 2。
更多信息请参见 electron-debug。
更多信息请参见 redux-devtools-dock-monitor。
如果你使用了无法通过 webpack 构建的第三方库,则必须在 webpack.config.base.js 中列出它们:
externals: [
// 在此放置无法通过 webpack 构建的 node 第三方库(例如 mysql、mongodb 等)
]
你可以在该文件中找到这些行。
使用 .module.css 导入 CSS 文件作为 css-modules。
$ npm run package
为所有平台打包应用:
$ npm run package-all
使用 electron-packager 配合 --all 选项为 darwin (macOS)、linux 和 win32 (Windows) 平台打包应用。构建后,你将在 release 文件夹中找到它们。否则,你只会得到针对当前操作系统的版本。
默认情况下,test、tools、release 文件夹以及 package.json 中的 devDependencies 将被忽略。
我们默认将某些模块的 peerDependencies 添加到忽略选项中,以减小应用体积。
babel-core 是 babel-loader 所需的,其大小约为 19 MBnode-libs-browser 是 webpack 所需的,其大小约为 3 MB。注意: 如果你想在运行时使用上述任何模块(例如
require('babel/register')),则应将其从devDependencies移到dependencies中。
请参阅 从非 Windows 平台构建 Windows 应用。
如果你想要原生风格的 UI(macOS El Capitan 和 Windows 10),react-desktop 可能非常适合你。
这是 https://github.com/chentsulin/electron-react-boilerplate 项目的一个分支。
MIT