發(fā)生在IPFS上有趣的項(xiàng)目

發(fā)生在IPFS上有趣的項(xiàng)目

https://medium.com/@kidinamoto/%E5%8F%91%E7%94%9F%E5%9C%A8ipfs%E4%B8%8A%E6%9C%89%E8%B6%A3%E7%9A%84%E9%A1%B9%E7%9B%AE-fd4bfb9830b5

ipfs is awesome

最近的研究重點(diǎn)在IPFS上敛纲,作為一個(gè)基于BitSwap和Merkle DAG的系統(tǒng),IPFS在不斷完善自身的技術(shù)棧。ipfs_research 中有許多很有想象力的新的協(xié)議婴噩。在這些新的協(xié)議的啟發(fā)下荠藤,我們能在IPFS上開(kāi)發(fā)出更多有意思的產(chǎn)品瞳秽。

1. 為什么需要 pubsub?

參考文獻(xiàn)https://ipfs.io/blog/25-pubsub/

消息的發(fā)布與訂閱Publish-Subscribe, 簡(jiǎn)稱為‘pubsub’, 是一種在大型網(wǎng)絡(luò)中被用于處理事件的模式熏迹。發(fā)布者(‘Publishers’ )按照主題發(fā)送信息或內(nèi)容辑甜;接收者( ‘subscribers’)接受他們感興趣的主題衰絮。 信息的傳輸不需要發(fā)布者和接受者間存在直連。這樣一來(lái)可以得到更大的網(wǎng)絡(luò)擴(kuò)展性和靈活性磷醋。

有些文檔共享編輯的應(yīng)用猫牡、動(dòng)態(tài)內(nèi)容的網(wǎng)站、聊天應(yīng)用邓线、游戲淌友、持續(xù)演化的數(shù)據(jù)集和用戶發(fā)布信息的webservice都需要用到消息的發(fā)布訂閱。它使得在數(shù)據(jù)中心骇陈、局域網(wǎng)震庭、大型P2P應(yīng)用上使用IPFS變得更快速。在不遠(yuǎn)的將來(lái)你雌,IPNS記錄可以通過(guò)pubsub發(fā)布器联,使得IPNS記錄的更新變得更快。節(jié)點(diǎn)間可以通過(guò)pubsub 追蹤一個(gè) merkle-linked global log的頭信息婿崭。

Demo

  • 以使用pubsub模式啟動(dòng)ipfs

<pre name="b88d" id="b88d" class="graf graf--pre graf-after--li" style="overflow: auto; font-family: Menlo, Monaco, "Courier New", Courier, monospace; font-size: 16px; margin: 43px 0px 0px; background: rgba(0, 0, 0, 0.05); padding: 20px; white-space: pre-wrap; color: rgba(0, 0, 0, 0.84); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">ipfs daemon — enable-pubsub-experiment</pre>

  • 訂閱“foo”主題

<pre name="5526" id="5526" class="graf graf--pre graf-after--li" style="overflow: auto; font-family: Menlo, Monaco, "Courier New", Courier, monospace; font-size: 16px; margin: 43px 0px 0px; background: rgba(0, 0, 0, 0.05); padding: 20px; white-space: pre-wrap; color: rgba(0, 0, 0, 0.84); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">ipfs pubsub sub foo</pre>

  • 在另一個(gè)窗口發(fā)布一條消息拨拓,在另一個(gè)窗口可以顯示“hello world”

<pre name="a638" id="a638" class="graf graf--pre graf-after--li" style="overflow: auto; font-family: Menlo, Monaco, "Courier New", Courier, monospace; font-size: 16px; margin: 43px 0px 0px; background: rgba(0, 0, 0, 0.05); padding: 20px; white-space: pre-wrap; color: rgba(0, 0, 0, 0.84); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">ipfs pubsub pub foo “hello world”</pre>

  • 查看所有的訂閱者

<pre name="8ce4" id="8ce4" class="graf graf--pre graf-after--li" style="overflow: auto; font-family: Menlo, Monaco, "Courier New", Courier, monospace; font-size: 16px; margin: 43px 0px 0px; background: rgba(0, 0, 0, 0.05); padding: 20px; white-space: pre-wrap; color: rgba(0, 0, 0, 0.84); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">ipfs pubsub peers</pre>

  • 查看所有的主題

<pre name="1d87" id="1d87" class="graf graf--pre graf-after--li" style="overflow: auto; font-family: Menlo, Monaco, "Courier New", Courier, monospace; font-size: 16px; margin: 43px 0px 0px; background: rgba(0, 0, 0, 0.05); padding: 20px; white-space: pre-wrap; color: rgba(0, 0, 0, 0.84); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">ipfs pubsub ls</pre>

2. OrbitDB

orbit-db是一個(gè)去服務(wù)器的,分布式的P2P數(shù)據(jù)庫(kù)逛球。 orbit-db將數(shù)據(jù)存儲(chǔ)在IPFS上千元,使用IPFS Pubsub自動(dòng)同步各個(gè)節(jié)點(diǎn)的數(shù)據(jù)苫昌。 這是一個(gè)能夠保證最終一致的數(shù)據(jù)庫(kù)颤绕,它使用CRDT進(jìn)行無(wú)沖突數(shù)據(jù)庫(kù)合并幸海,使orbit-db成為offline-first應(yīng)用程序的絕佳選擇。

案例-orbit

Orbit是一個(gè)P2P的聊天軟件奥务。

Devcon2上的介紹視頻: Orbit Distributed, Real Time Web3 Apps with IPFS and Ethereum

<figure name="636e" id="636e" class="graf graf--figure graf-after--p" style="display: block; margin: 43px 0px 0px; position: relative; clear: both; outline: 0px; box-sizing: border-box; user-select: auto; z-index: 100; color: rgba(0, 0, 0, 0.84); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; font-size: 20px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">

<canvas class="progressiveMedia-canvas js-progressiveMedia-canvas" width="75" height="40" style="display: block; vertical-align: baseline; position: absolute; top: 0px; left: 0px; width: 700px; height: 394.797px; margin: auto; box-sizing: border-box; visibility: hidden; opacity: 0; backface-visibility: hidden; transition: visibility 0s linear 0.5s, opacity 0.1s 0.4s;"></canvas>

[圖片上傳失敗...(image-a34ad7-1522941041721)]

</figure>

線上測(cè)試環(huán)境:https://orbit.chat/#/loading

Orbit在IPFS上開(kāi)發(fā)出了P2P數(shù)據(jù)庫(kù)OrbitDB物独。

Orbit的Git項(xiàng)目地址:https://github.com/orbitdb

安裝

當(dāng)Nodejs版本在8.0之上,

npm install -g orbit-db-cli

測(cè)試是否安裝成功

orbitdb help

應(yīng)出現(xiàn)以下內(nèi)容:

_     _ _         _ _                | |   (_) |       | | |       ___  _ __| |__  _| |_    __| | |__      / _ \| '__| '_ \| | __|  / _` | '_ \     | (_) | |  | |_) | | |_  | (_| | |_) |      \___/|_|  |_.__/|_|\__|  \__,_|_.__/             Peer-to-Peer Database       https://github.com/orbitdb/orbit-dbUsage: orbitdb <command> <database>Commands:  add <database> [<data>]            Add an entry to an eventlog or feed                                     database. Can be only used on:                                     eventlog|feed  create <database> <type>           Create a new database. Type can be one of:                                     eventlog|feed|docstore|keyvalue|counter                                                                  [aliases: new]  del <database> <key>               Delete an entry from a database. Only valid                                     for data types of: docstore|keyvalue|feed                                                       [aliases: delete, remove]  demo <name>                        Runs a sequence of commands as an example                                                                 [aliases: tour]  drop <database> yes                Remove a database locally. This doesn't                                     remove data on other nodes that have the                                     removed database replicated.                                                              [aliases: destroy]  get <database> [<search>]          Query the database.                                                        [aliases: query, search]  id                                 Show information about current orbit-db id  import <file> <database> <schema>  Import a CSV file to a document database                                                                  [aliases: csv]  inc <database> [<increment>]       Increase the value of a counter database.                                     Default increment is 1\. [aliases: increase]  info <database>                    Show information about a database                                                               [aliases: status]  put <database> <document>          Add a document to a document database  replicate <database>               Replicate a database with peers.  set <database> <key> <value>       Set a value of a key in KeyValue database  version                            Show information about current orbit-dbOptions:  -h, --help  Show help                                                [boolean]

測(cè)試數(shù)據(jù)庫(kù)存儲(chǔ)日志的特性:

  • 創(chuàng)建一個(gè)feed用于存儲(chǔ)log信息
orbitdb create hello feed/orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello
  • 插入一條日志
orbitdb add /orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello "world"Added QmSwYZheHVa3eWf83XwnWNJtjGG7EWjiWTaTKLeFozVRnz
  • 讀取feed內(nèi)容
$ orbitdb get /orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello"world"
  • 刪除某一條日志
$ orbitdb del /orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello QmSwYZheHVa3eWf83XwnWNJtjGG7EWjiWTaTKLeFozVRnzDeleted QmSwYZheHVa3eWf83XwnWNJtjGG7EWjiWTaTKLeFozVRnz
  • 得到feed所有內(nèi)容
orbitdb get /orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/helloDatabase '/orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello' is empty!
  • 獲取feed所有信息
orbitdb info hello/orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello> Type: feed> Owner: QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1> Data file: ./orbitdb/QmfSUsdr34iGio68eMezDzZLCKZTnbsxNJgiNipimZtpi1/hello.orbitdb> Entries: 0> Oplog length: 2

參考文獻(xiàn):

https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氯葬,一起剝皮案震驚了整個(gè)濱河市挡篓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帚称,老刑警劉巖官研,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異闯睹,居然都是意外死亡戏羽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門楼吃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)始花,“玉大人,你說(shuō)我怎么就攤上這事孩锡】嵯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵躬窜,是天一觀的道長(zhǎng)浇垦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)荣挨,這世上最難降的妖魔是什么溜族? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮垦沉,結(jié)果婚禮上煌抒,老公的妹妹穿的比我還像新娘。我一直安慰自己厕倍,他們只是感情好寡壮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著讹弯,像睡著了一般况既。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上组民,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天棒仍,我揣著相機(jī)與錄音,去河邊找鬼臭胜。 笑死莫其,一個(gè)胖子當(dāng)著我的面吹牛癞尚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乱陡,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浇揩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了憨颠?” 一聲冷哼從身側(cè)響起胳徽,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爽彤,沒(méi)想到半個(gè)月后养盗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡适篙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年爪瓜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匙瘪。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铆铆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丹喻,到底是詐尸還是另有隱情薄货,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布碍论,位于F島的核電站谅猾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鳍悠。R本人自食惡果不足惜税娜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藏研。 院中可真熱鬧敬矩,春花似錦、人聲如沸蠢挡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)业踏。三九已至禽炬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勤家,已是汗流浹背腹尖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伐脖,地道東北人热幔。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓乐设,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親断凶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伤提,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • IPFS - Content Addressed, Versioned, P2P File System (dra...
    wade_van閱讀 3,111評(píng)論 5 14
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理巫俺,服務(wù)發(fā)現(xiàn)认烁,斷路器,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 親愛(ài)的戰(zhàn)友們介汹,大家晚上好却嗡!我是50班周紅兵,湖南區(qū)塊鏈俱樂(lè)部螞蟻聯(lián)盟發(fā)起人嘹承,Ulord基金會(huì)成員窗价。感謝24班戰(zhàn)友劉...
    周紅兵_2e37閱讀 1,090評(píng)論 1 10
  • 幸福是什么?我們每個(gè)人對(duì)幸福的定義都不一樣叹卷。有的人認(rèn)為家庭美滿就是幸福撼港,有的人認(rèn)為天天開(kāi)心就是幸福,有的人認(rèn)為吃一...
    你好222閱讀 119評(píng)論 1 2
  • 在很多人印象中月經(jīng)期是不能吃生冷食物的骤竹,最好是不吃水果帝牡,其實(shí)只要我們選對(duì)了水果,不僅可以吃蒙揣,更是能比平時(shí)起到更好的...
    暖暖女人心閱讀 250評(píng)論 0 3