2018.07.27 丨 msup

IPFS: pubsub功能的使用

2018.07.27 丨 msup

本文内容转自董天一“IPFS指南”微信公众号

董天一 ,汉光百货商务电子技术总监 资深IPFS技术专家,IPFS中国区技术布道者。毕业于北京大学, 曾任甲骨文亚洲研发中心(中国)数据库开发工程师。

什么是 pubsub?

发布订阅模式(Publish–subscribe pattern),最早是由苹果公司在 Mac OS 引入。


消息的发送者(publishers)不直接将消息发送给接收者(subscriber)。而是将消息分门别类,发送者并不知道也无需知道接收者的存在。而接收者只需要订阅一个或者多个类别的消息类,只接收感兴趣的消息,不知道也无需知道发布者的存在。(https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)


写代码的朋友对于观察者模式(Observer)并不陌生。这个有些类似软件设计模式里面的观察者模式(Observer)。但是并不完全相同。pubsub比Observer更加的松耦合。这里不再详细对比二者的区别。有兴趣的朋友自行Google一下。


pubsub功能目前还属于ipfs的一个实验性质的功能,如果要开启pubsub功能,在启动ipfs daempon的时候需要指定参数: --enable-pubsub-experiment。


ipfs pubsub 如何使用?(具体案例)

1、搭建两个IPFS节点A和B


如果还不知道节点如何搭建,参见之前的文章(如何在IPFS网络里面上传一张图片)

A(小编本地节点):

IPFS节点ID: 

QmTrRNgt6M9syRq8ZqM4o92Fgh6avK8v862n2QZLyDPywY

IPFS地址:192.168.162.129(保护隐私,没有使用公网IP)


B(亚马逊aws):

IPFS地址:13.231.198.154

IPFS节点地址:

/ip4/13.231.198.154/tcp/4001/ipfs/QmXL2h6Y51BHZMaypzjCnNc1MiVk2H5EZJxWgAuRkLanaK


2、启动节点B


ipfs daemon --enable-pubsub-experiment

(注意这里需要使用参数 --enable-pubsub-experiment)


3、为了快速演示,将节点A和B直连


3.1 删除节点A的全部bootstrap地址

ipfs bootstrap rm all

3.2 在A节点添加B节点为bootstrap节点

ipfs bootstrap add /ip4/13.231.198.154/tcp/4001/ipfs/QmXL2h6Y51BHZMaypzjCnNc1MiVk2H5EZJxWgAuRkLanaK


4、启动节点A


ipfs daemon --enable-pubsub-experiment

(注意这里需要使用参数 --enable-pubsub-experiment)


5、pubsub功能使用


5.1 在A节点上新开一个命令行,执行

ipfs pubsub sub flytofuture

这句的意思是我们在节点A订阅了消息主题:flytofuture。凡是发往这个消息主题的消息都会被A节点接收到。


5.2 我们在B节点对消息主题 flytofuture发送消息

ipfs pubsub pub flytofuture "hello, IPFS指南,飞向未来!"

这个时候我们就可以在A节点的命令行看到消息输出:hello, IPFS指南,飞向未来!

两个跨越了不同网络,不同地域的IPFS节点进行pubsub功能的通信。

实际上,pubsub功能不仅仅之只限于两个直连的节点之间,还可以通过中间节点进行中转。


例如:有A,B,C三个节点

A链接到B

B连接到C

A与C并不直接连接。

那么A仍然可以订阅收到来自于C的消息。这对于一些复杂的网络环境里面非常有用,比如在一些NAT不太友好的网络环境。


pubsub相关的命令使用和功能

pubsub相关的命令使用:

  • ipfs pubsub ls -- 列出来本节点订阅的全部主题

  • ipfs pubsub peers -- 列出来与本节点相连接的开通

  • ipfs pubsub pub -- 发布数据到相应的主题

  • ipfs pubsub sub -- 订阅主题


pubsub功能有很多用途,广大开发者可以开脑洞基于这样的功能构建出来自己的应用。


目前IPFS上有两个标杆应用是基于pubsub功能进行搭建的。

  • orbit-db: 分布式数据库

  • Orbit: 点对点的聊天工具



活动预告:


董天一老师将于9月7-9日参加BCCC全球区块链技术案例峰会,部分精彩议题如下:

BCCC大会将在全球范围内采集最具价值和代表性的行业实践案例。旨在为中国的区块链企业搭建一个案例智库和交流平台,用案例研讨的方式加速区块链技术在中国的落地,更多大会详情可官网查看。


本届BCCC峰会,我们特意为大家准备了「体验票」的福利,点击「此处」进入报名页面,提交相关信息,即可有机会和我们一同参会哟!


媒体联系

票务咨询:赵丹丹 15802217295

赞助咨询:郭艳慧 13043218801

媒体支持:景    怡 13920859305

提交需求