【董天一】IPFS: pubsub功能的使用
作者簡介:董天一 ,IPFS/Filecoin中國區技術布道人 ,《IPFS指南》作者
畢業於北京大學軟件與微電子學院,資深區塊鏈技術開發者,現致力於IPFS/Filecoin在中國的技術推廣,本文原載微信公眾號:IPFS指南(ipfs_guide)
什麽是 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 -- 列出來與本節點相連接的開通pubsub功能的節點
ipfs pubsub pub -- 發布數據到相應的主題
ipfs pubsub sub -- 訂閱主題
pubsub功能有很多用途,廣大開發者可以開腦洞基於這樣的功能構建出來自己的應用。
目前IPFS上有兩個標桿應用是基於pubsub功能進行搭建的。
orbit-db: 分布式數據庫
Orbit: 點對點的聊天工具
【董天一】IPFS: pubsub功能的使用