1. 程式人生 > >IPFS: pubsub功能的使用

IPFS: pubsub功能的使用

什麼是 pubsub?
釋出訂閱模式(Publish–subscribe pattern),最早是由蘋果公司在 Mac OS 引入。
訊息的傳送者(publishers)不直接將訊息傳送給接收者(subscriber)。而是將訊息分門別類,傳送者並不知道也無需知道接收者的存在。而接收者只需要訂閱一個或者多個類別的訊息類,只接收感興趣的訊息,不知道也無需知道釋出者的存在。(https://en.wikipedia.org/wiki/Publish–subscribe_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 – 釋出資料到相應的主題
ipfs pubsub sub – 訂閱主題

pubsub功能有很多用途,廣大開發者可以開腦洞基於這樣的功能構建出來自己的應用。
目前IPFS上有兩個標杆應用是基於pubsub功能進行搭建的。
orbit-db: 分散式資料庫
Orbit: 點對點的聊天工具
原文來自於微信公眾號:IPFS指南(ipfs_guide)