twister

Peer-to-peer microblogging

用户工具

站点工具


zh:开发:dht_协议:结构

====== 差别 ====== 这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

zh:开发:dht_协议:结构 [2014/09/28 01:34] (当前版本)
xiaolan 创建
行 1: 行 1:
 +====== DHT 协议结构 ======
 +
 +===== 用户发贴 =====
 +
 +用户的发贴是B编码后的结构,并且具有以下字段:
 +
 +<code javascript>​
 +"​userpost"​ :
 +{
 +  "​n"​ : username,
 +  "​k"​ : seq number,
 +  "​msg"​ : message,
 +  "​time"​ : unix utc,
 +  "​height"​ : best height at user (number of blocks),
 +  "​lastk"​ : seq number of previous public post -opt,
 +  "​dm"​ : encrypted message (dm) -opt,
 +  "​rt"​ : original userpost - opt,
 +  "​sig_rt"​ : sig of rt - opt,
 +  "​reply"​ : - opt,
 +  {
 +    "​n"​ : reference username,
 +    "​k"​ : reference k,
 +  }
 +}
 +"​sig_userpost"​ : signature of bencoded "​userpost"​ by user "​n"​
 +</​code>​
 +
 +
 +===== 基本结构 ​ =====
 +
 +例如在 [[zh:​开发:​dht_协议:​apis#​getData]] 和 [[zh:​开发:​dht_协议:​apis#​putData]] 中的DHT命令
 +
 +<code javascript>​
 +{
 +  "​p"​ : {
 +    "​height"​ : number of blocks at time it was created,
 +    "​seq"​ : update sequence (for single type values),
 +    "​target"​ : {
 +      "​n"​ : user name or hashtag name etc,
 +      "​r"​ : name of the resource,
 +      "​t"​ : either "​s"​ (single) or "​m"​ (multi)
 +    },
 +    "​time"​ : unix utc timestamp in seconds,
 +    "​v"​ : this is the actual value (string, dict etc)
 +  },
 +  "​sig_p"​ : signature of "​p"​ contents (bencoded),
 +  "​sig_user"​ : user signing this
 +}
 +</​code>​
 +每一个资源在关注列表中定义了什么将要到上面“v”值。
 +
 +==== 资料 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​profile","​t":"​s"​}
 +{
 +  "​fullname"​ : presentation name,
 +  "​bio"​ : short bio,
 +  "​location"​ : location,
 +  "​url"​ : user home page url,
 +  "​background"​ : background img url
 +}
 +</​code>​
 +
 +==== 头像 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​avatar","​t":"​s"​}
 +</​code>​
 +嵌入式图片 (最大 4kB):
 +''"​data:​image/​jpg;​base64,/​9j..."''​
 +或者链接到外部图片:​
 +''"​http://​www.gravatar.com/​avatar/​205e460b..."''​
 +
 +==== 关注 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​following"​ + N,"​t":"​s"​}
 +</​code>​
 +这是一个关注指定用户的列表。因为在DHT网络中存储的空间限制,这个列表或许被通过增加中的N值(从1开始)分成数页。N被作为字符串连接在一起到“r”字段。
 +["​user1","​user2","​user3"​...]
 +
 +必须有一个与最后一页N + 1的空列表。
 +
 +==== 帖子 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​post"​ + K,"​t":"​s"​}
 +</​code>​
 +这是一个用户"​n"​的 K-th (公开) 帖子,在 "​userpost"​ 中定义。
 +
 +==== 状态 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​status","​t":"​s"​}
 +</​code>​
 +这个资源包含了用户最后的发贴。因为一个相同资源被更新数次对于“seq”列的增长很重要。事实上,“seq” = K。
 +
 +==== 回复 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​replies"​ + K,"​t":"​m"​}
 +</​code>​
 +这是一个回复用户"​n"​的K-th帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
 +
 +==== 转推 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​rts"​ + K,"​t":"​m"​}
 +</​code>​
 +这是一个RTs (转推)用户"​n"​的K-th的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
 +
 +==== hashtag ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​tag,"​r":"​hashtag","​t":"​m"​}
 +</​code>​
 +这是一个包含 hashtag "​n"​ 的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
 +
 +==== 提及 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​mention","​t":"​m"​}
 +</​code>​
 +这是一个提及@username的帖子列表。它包括了帖子本身。因为它是一个“m”类型,一个新帖子可能被任何一个有效用户添加到这个资源中。
 +
 +==== 跟踪 ====
 +
 +<code javascript>​
 +"​target":​ {"​n":​username,"​r":"​tracker","​t":"​m"​}
 +</​code>​
 +这是一个特殊的只读资源,用于获取的用户群分发帖子所用的节点。
  
zh/开发/dht_协议/结构.txt · 最后更改: 2014/09/28 01:34 由 xiaolan