什么是 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相关的命令使用:
ipfs pubsub ls — 列出来本节点订阅的全部主题ipfs pubsub peers — 列出来与本节点相连接的开通pubsub功能的节点ipfs pubsub pub <topic> <data> — 发布数据到相应的主题ipfs pubsub sub <topic> — 订阅主题pubsub功能有很多用途,广大开发者可以开脑洞基于这样的功能构建出来自己的应用。
目前ipfs上有两个标杆应用是基于pubsub功能进行搭建的。
来源:知乎专栏:ipfs指南(作者:飞向未来)