relay中继怎么保证不丢失客户端的帖子呢?也就是说relay的搭建者会不会对客户端发出的event事件选择性的丢弃?
Nostr的基本工作原理
1.Nostr包含两个组件:客户端和中继。 每个用户运行一个客户端。任何人都可以运行一个中继。
2.每个用户都由一个公钥来进行标识。每个帖子都需要进行签名,并且每个客户端都会验证这些签名。
3.获取数据,客户端从自己选择/设置的中继获取数据。发送数据,客户端将数据发布到自己选择/设置的中继。 中继与中继之间不相互通信,中继仅直接与客户端通信。
4.例如,要“关注”某个人,我们只需要让客户端查询它所知道的中继,以获取(被关注用户的)公钥对应的帖子。
5.在客户端启动时,客户端会向它配置的所有中继,查询已关注的所有用户的数据(例如,从最后一天开始的所有更新),然后按时间顺序向用户展示数据。
6.“帖子”可以包含任何类型的结构化数据,但最常用的类型将会作为标准,这样所有客户端和中继都可以无缝地处理它们。
(Translated from https://github.com/nostr-protocol/nostr)
Discussion
首先,从 relay 的可靠性来讲,消息丢失是有可能的。做过软件开发就会知道,程序会有 bug,服务、机器、网络和数据库都有可能出问题。因此,对消息只是概率问题。
其次,relay 是任何人都可以去开发和部署的。在协议层面需要按照 Nostr 的规范来,这样才能和各个客户端兼容,实现通信。但是,服务端的具体实现逻辑,不同的中继可以有自己的实现。relay 接收到一条消息,具体要如何处理,各个 relay 可以有差异,例如不入库。
现在有一些付费的 relay,可以实现过滤广告,就是这个原因。
那如何保证你的数据保存可靠?
1.接入更多的 relay,每个relay 都存一份数据,实现高可用。一般建议是 10 个左右,越多通常越耗电耗流量,客户端可能响应慢。
2.选择一些 App 推荐的、大咖大家都在使用的 relay,这样会更靠谱。经常出问题的 relay,慢慢就没人用了。
3.自己搭 relay,自己存储消息做备份。
#[0]