理解发件箱模型
了解 Nostr 的智能中继系统如何确保你的帖子到达所有关注你的人
问题:丢失的帖子
你有没有在 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 列表,而且内容是端到端加密的。你的客户端两份列表都会保存。如果私信收不到,该检查的是私信中继列表。
“我需要手动告诉人们我的中继”
错误: 你的客户端自动发布你的中继列表。关注者在关注你时会发现它。
技术深入(可选)
客户端如何发现你的中继
- 初始关注: 当有人关注你时,他们的客户端请求你的 kind:10002 事件
- 你的中继被揭示: 事件包含你的中继偏好
- 持续更新: 如果你更改中继,你发布一个新的 kind:10002
- 传播: 客户端传播中继列表以帮助发现
可替换事件
kind:10002 是可替换的 - 只保留最新版本。这意味着:
- 没有历史膨胀
- 易于更新
- 客户端管理简单
隐私考虑
你的中继列表是公开的。任何人都可以看到你使用哪些中继。这是系统工作所必需的,但要注意它是可见的。
采取行动
检查你当前的中继
查看你的 Nostr 客户端设置:
- 你连接到哪些中继?
- 它们被标记为 “read” 还是 “write”?
- 列表够短吗,大致在四到八个之间?
优化你的设置
如果你有 10 个以上的中继:
- 移除经常掉线的
- 留下几个最常用的,几个用来发帖,两三个用来收提及
- 确保至少有一个是用于提及的 “read”
让更多人知道
帮助他人理解:
- 分享本指南
- 解释为什么你看不到某人的帖子
- 帮助解决发现问题
发件箱要解决什么
0/5 已回答