Skip to content

理解发件箱模型

了解 Nostr 的智能中继系统如何确保你的帖子到达所有关注你的人

10-15 分钟 新手 · 第 7 篇,共 7 篇

问题:丢失的帖子

你有没有在 Nostr 上发布过内容,但你的朋友看不到?或者关注了某人但从未看到他们的帖子?这就是发现问题

旧方式(发件箱模型之前)

你发布 → 中继 A → ❌ 你的朋友只使用中继 B

你朋友的视角:
❌ "@alice 的帖子去哪了?"

你会把帖子发布到你最喜欢的中继,但你的关注者可能使用完全不同的中继。他们永远看不到你的内容!

解决方案:发件箱模型

发件箱模型通过公开宣告你在哪里发帖来解决这个问题。就像留下一个转寄地址。

你:"我发布到中继 A、中继 B 和中继 C"
(存储在你的 kind:10002 事件中)

关注者:"明白了!我会去这些中继查看 @alice 的帖子"

什么是发件箱模型?

发件箱模型(Outbox Model,NIP-65)就像拥有一本公共地址簿,告诉每个人在哪里找到你的帖子。

邮局类比延伸

记住中继就像邮局?发件箱模型添加了一个转寄地址系统

传统邮局:

  • 你在一个邮局有一个邮箱
  • 如果你搬家,人们会把邮件寄到错误的地方

Nostr 发件箱模型:

  • 你有一个公共列表,列出你接收邮件的邮局
  • 如果你”搬家”(切换中继),你更新你的公共列表
  • 每个人都知道在哪里找到你

你的中继列表(kind:10002)

你的 Nostr 客户端自动创建一个中继列表,告诉其他人:

{
  "kind": 10002,
  "tags": [
    // 你通常发布的中继(你的 "outbox")
    ["r", "wss://relay.nostr.info", "write"],
    ["r", "wss://relay.damus.io", "write"],
    
    // 你查看提及的中继(你的 "inbox")
    ["r", "wss://nos.lol", "read"],
    ["r", "wss://relay.primal.net", "read"]
  ]
}

标记说明:

  • write → 你发布内容的地方(outbox)
  • read → 你检查提及/回复的地方(inbox)
  • 无标记 → 既可读又可写

实际工作原理

场景 1:Alice 发布,Bob 关注

Alice 的中继列表(kind:10002):
  - wss://relay.a.com [write]
  - wss://relay.b.com [write]
  - wss://relay.inbox.com [read]

Bob 关注 Alice。Bob 的客户端看到:
  "检查 wss://relay.a.com 和 wss://relay.b.com 获取 Alice 的帖子"

结果:Bob 连接到这两个 write 中继并看到 Alice 的内容!✅

场景 2:Charlie 提及 Alice

Charlie 在帖子中提及 @alice

Charlie 的客户端查看同一份中继列表,找出标着
[read] 的那一条,也就是 Alice 的收件中继:
  - wss://relay.inbox.com [read]

Charlie 的客户端把提及发到那里

结果:即使 Alice 离线也能看到提及!✅

场景 3:Alice 切换中继

Alice 停止使用 relay.a.com,开始使用 relay.c.com

1. Alice 更新她的 kind:10002 中继列表
2. 她的客户端把更新后的列表发布到她的中继上
3. 关注者自动开始检查 relay.c.com

结果:没有丢失的帖子,无需手动重新连接!✅

为什么这很重要

1. 无需中心化的发现

传统社交媒体有一个知道每个人的中央服务器。Nostr 是去中心化的,所以需要另一种找到人的方式。

发件箱模型 = 分布式发现

2. 抗审查

如果一个中继屏蔽了你,你的关注者仍然可以通过你在其他中继上的中继列表找到你。

3. 灵活性

随时切换中继而不会失去你的受众。只需更新你的中继列表。

4. 效率

客户端只连接到你使用的中继,而不是世界上每个中继。


最佳实践

保持列表小巧

推荐: 列表要短。NIP-65 本身建议 2-4 个 write 中继加 2-4 个 read 中继,所以大多数人最后总共落在四到八个之间。

为什么?

  • 更多中继 = 更多连接 = 更多电池消耗
  • 一旦你的关注者已经能找到你,再加中继就是收益递减
  • 关注者的客户端直接读取你列表上的中继,多出来的条目起不到任何作用

混合读写

良好的设置:

  • 2-3 个 “write” 中继(你发布的地方)
  • 1-2 个 “read” 中继(用于提及)

示例:

写入:流行中继 A,你的个人中继
读取:流行中继 B(用于提及)

选择可靠的中继

使用知名的、可靠的中继:

  • 你需要的时候它在线,很少掉线
  • 长期保存你的帖子(有些中继为了省空间会悄悄删掉旧帖)
  • 服务器离你近,用起来更快

常见误解

”我需要在每个中继上”

错误: 在 20 多个中继上并没有帮助。中继之间不会互相复制帖子,所以一个没人去读的中继只是多一条连接而已。你的中继列表已经会把关注者的客户端指到该去的地方,几个好中继就够用了。

“如果我离开一个中继,我会失去关注者”

错误: 只需更新你的中继列表(kind:10002)。关注者将自动检查你的新中继。

“私信也通过发件箱发送”

并非如此: 私信(NIP-17)走的是另一份专门的私信中继列表(kind:10050),不是本文讲的 kind:10002 列表,而且内容是端到端加密的。你的客户端两份列表都会保存。如果私信收不到,该检查的是私信中继列表。

“我需要手动告诉人们我的中继”

错误: 你的客户端自动发布你的中继列表。关注者在关注你时会发现它。


技术深入(可选)

客户端如何发现你的中继

  1. 初始关注: 当有人关注你时,他们的客户端请求你的 kind:10002 事件
  2. 你的中继被揭示: 事件包含你的中继偏好
  3. 持续更新: 如果你更改中继,你发布一个新的 kind:10002
  4. 传播: 客户端传播中继列表以帮助发现

可替换事件

kind:10002 是可替换的 - 只保留最新版本。这意味着:

  • 没有历史膨胀
  • 易于更新
  • 客户端管理简单

隐私考虑

你的中继列表是公开的。任何人都可以看到你使用哪些中继。这是系统工作所必需的,但要注意它是可见的。


采取行动

检查你当前的中继

查看你的 Nostr 客户端设置:

  • 你连接到哪些中继?
  • 它们被标记为 “read” 还是 “write”?
  • 列表够短吗,大致在四到八个之间?

优化你的设置

如果你有 10 个以上的中继:

  • 移除经常掉线的
  • 留下几个最常用的,几个用来发帖,两三个用来收提及
  • 确保至少有一个是用于提及的 “read”

让更多人知道

帮助他人理解:

  • 分享本指南
  • 解释为什么你看不到某人的帖子
  • 帮助解决发现问题

发件箱模型测验

发件箱要解决什么

问题 1 / 5

0/5 已回答

发件箱模型解决的是什么问题?
关键

继续阅读

新手 等级的最后一篇指南

新手 等级到此为止,路径在下一个等级继续。

继续到 中级
改进此页面 发现错别字或不清楚的地方?在 GitHub 上编辑此指南。
在 Nostr 上关注我们