版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單元五區(qū)塊鏈中節(jié)點(diǎn)間的通信CommunicaitoninNodesPART1區(qū)塊鏈網(wǎng)絡(luò)基礎(chǔ)公有鏈區(qū)塊鏈網(wǎng)絡(luò)一般具有數(shù)量多、分布廣、自治以及開發(fā)自由等特點(diǎn),一般采用P2P對等網(wǎng)絡(luò)通信的方式區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)均會承擔(dān)網(wǎng)絡(luò)路由、驗(yàn)證數(shù)據(jù)、傳播數(shù)據(jù)以及發(fā)現(xiàn)節(jié)點(diǎn)等功能采用的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)為Mesh網(wǎng)絡(luò)(即網(wǎng)狀拓?fù)浣Y(jié)構(gòu))聯(lián)盟鏈區(qū)塊鏈網(wǎng)絡(luò)適用于企業(yè)間進(jìn)行高頻的數(shù)據(jù)交換以及工業(yè)生產(chǎn)中存在的高頻數(shù)據(jù)記錄等業(yè)務(wù)將多個(gè)參與者構(gòu)建為獨(dú)立的聯(lián)盟,在聯(lián)盟內(nèi)的成員采用區(qū)塊鏈的形式管理數(shù)據(jù)聯(lián)盟與聯(lián)盟間將以物理的形式實(shí)現(xiàn)“數(shù)據(jù)隔離”,降低區(qū)塊鏈網(wǎng)絡(luò)的拓?fù)鋸?fù)雜,提升效率私有鏈區(qū)塊鏈網(wǎng)絡(luò)集中于公司或組織的內(nèi)部使用,類似于傳統(tǒng)中心化網(wǎng)絡(luò)構(gòu)建私有鏈網(wǎng)絡(luò),所有數(shù)據(jù)都保存于一個(gè)中心節(jié)點(diǎn)中。借助區(qū)塊鏈技術(shù)實(shí)現(xiàn)數(shù)據(jù)的安全和隱私保護(hù)PART2Networkx實(shí)現(xiàn)區(qū)塊鏈網(wǎng)絡(luò)繪制區(qū)塊鏈網(wǎng)絡(luò)1.安裝Networkx確保Python版本為3.6+,使用pip可直接安裝,確保具體命令如下:$pipinstallnetworkx若要升級到較新版本,請使用--upgrade,具體操作如下:$pipinstall--upgradenetworkx繪制區(qū)塊鏈網(wǎng)絡(luò)2.創(chuàng)建圖形(Graph)使用工具的第一步,創(chuàng)建一個(gè)沒有節(jié)點(diǎn)和邊的空圖形,具體代碼如下:importnetworkxasnxG=nx.Graph()繪制區(qū)塊鏈網(wǎng)絡(luò)3.添加節(jié)點(diǎn)(Node)(1)直接添加節(jié)點(diǎn)如下為直接添加一個(gè)節(jié)點(diǎn)的代碼示例:G.add_node(1)(2)通過可迭代對象添加節(jié)點(diǎn)如下為添加的代碼示例:G.add_nodes_from([2,3])繪制區(qū)塊鏈網(wǎng)絡(luò)4.添加邊(Edge)(1)直接添加如下為直接添加邊的代碼示例:G.add_edge(1,2)(2)通過可迭代對象添加如下為具體代碼示例:G.add_edges_from([(1,2),(1,3)])繪制區(qū)塊鏈網(wǎng)絡(luò)5.檢查圖的元素信息
完成圖、節(jié)點(diǎn)和邊信息添加后,可通過相關(guān)方法檢查。具體操作如下:print(list(G.nodes))#顯示圖中的節(jié)點(diǎn)信息print(list(G.edges))#顯示圖中的邊信息print(G.number_of_nodes())#顯示圖中節(jié)點(diǎn)數(shù)量print(G.number_of_edges()) #顯示圖中邊數(shù)量print(G.nodes()[1])#獲取名稱為1的節(jié)點(diǎn)完整信息繪制區(qū)塊鏈網(wǎng)絡(luò)6.從圖中刪除元素如下代碼可實(shí)現(xiàn)從已存在的圖中刪除節(jié)點(diǎn)和邊:G.remove_node(2)#刪除名稱為2的節(jié)點(diǎn)G.remove_edge(1,3)#刪除節(jié)點(diǎn)1和節(jié)點(diǎn)3的邊繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點(diǎn)和邊緣添加屬性(1)向圖形添加屬性通過向nx.Graph()函數(shù)中添加參數(shù)可以實(shí)現(xiàn)屬性的添加具體的屬性設(shè)置和獲取代碼如下:G=nx.Graph(name="test_network")print(G.graph['name'])或者可以直接通過G.graph設(shè)置圖形的屬性,具體代碼如下:G.graph['location']='china'print(G.graph['location'])繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點(diǎn)和邊緣添加屬性(2)向節(jié)點(diǎn)添加屬性與圖形添加屬性的方法類似,節(jié)點(diǎn)添加也有兩種方式,具體代碼示例如下:G.add_node(4,name='test4')#直接添加節(jié)點(diǎn)和對應(yīng)屬性G.add_nodes_from([5,6],location='jiangsu')#通過迭代的方式添加節(jié)點(diǎn)和屬性print(list(G.nodes.data()))#輸出添加節(jié)點(diǎn)后的節(jié)點(diǎn)及屬性信息繪制區(qū)塊鏈網(wǎng)絡(luò)7.向圖形、節(jié)點(diǎn)和邊緣添加屬性(3)向邊添加屬性參照圖形以及節(jié)點(diǎn)的屬性添加方法,邊設(shè)置屬性可以有如下代碼示例:G.add_edge(4,5,weight=4)#直接添加邊屬性G.add_edges_from([(1,2,{'color':'blue'}),(4,6,{'weight':'5'})])#通過添加可迭代對象G[1][2]['weight']=8#給已存在的邊添加屬性繪制區(qū)塊鏈網(wǎng)絡(luò)8.繪制簡單網(wǎng)絡(luò)如下代碼為使用networkx生成示例圖和繪制圖形的示例代碼:importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()G.add_node(1)G.add_node(2)G.add_node(3)G.add_edges_from([(1,2),(2,3),(3,1)])nx.draw(G)plt.show()實(shí)戰(zhàn)練習(xí):繪制不同類型的區(qū)塊鏈網(wǎng)絡(luò)1.練習(xí)目標(biāo)使用networkx繪制不同類型的區(qū)塊鏈網(wǎng)絡(luò),包括公有鏈網(wǎng)絡(luò)、聯(lián)盟鏈網(wǎng)絡(luò)以及私有鏈網(wǎng)絡(luò)。2.任務(wù)內(nèi)容(1)使用networkx工具繪制私有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。(2)使用networkx工具繪制聯(lián)盟有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。(3)使用networkx工具繪制公有鏈區(qū)塊鏈網(wǎng)絡(luò),并保存繪制結(jié)果。感謝觀看單元五區(qū)塊鏈中節(jié)點(diǎn)間的通信CommunicaitoninNodesPART1P2P網(wǎng)絡(luò)通信基礎(chǔ)概念P2P的英文全稱為peer-to-peer,中文全稱為對等式網(wǎng)絡(luò),又稱點(diǎn)對點(diǎn)技術(shù),是無中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系。Socket通信Socket通過中文直譯為“套接字”,是在P2P網(wǎng)絡(luò)通信常用的通信手段。從原理上講,Socket并不是一種通信協(xié)議而是一個(gè)介于應(yīng)用層與傳輸層之間的抽象層TCP/IP參考模型Socket通信與傳統(tǒng)網(wǎng)絡(luò)通信方式類似,Socket的通信主體包括客戶端和服務(wù)端。在客戶端和服務(wù)端均創(chuàng)建Socket對象后,雙方就可以實(shí)現(xiàn)數(shù)據(jù)通信。在數(shù)據(jù)傳輸方面,服務(wù)端將開啟一個(gè)輪詢機(jī)制,不斷監(jiān)聽客戶端發(fā)送的請求,并根據(jù)請求信息給予響應(yīng)PART2P2P網(wǎng)絡(luò)通信的程序?qū)崿F(xiàn)基于Socket實(shí)現(xiàn)P2P通信1.創(chuàng)建Socket服務(wù)端(1)安裝依賴使用pip可以安裝依賴包,具體操作如下:#首先安裝flask依賴$pipinstallflask#再安裝flask-socketio依賴$pipinstallflask-socketio基于Socket實(shí)現(xiàn)P2P通信1.創(chuàng)建Socket服務(wù)端(2)創(chuàng)建socket接口并啟動基于Socket實(shí)現(xiàn)P2P通信2.創(chuàng)建Socket客戶端(1)安裝依賴使用pip執(zhí)行以下操作進(jìn)行安裝,具體操作如下:$pipinstall"python-socketio[client]"基于Socket實(shí)現(xiàn)P2P通信2.創(chuàng)建Socket客戶端(2)實(shí)現(xiàn)Socket請求根據(jù)如下代碼可實(shí)現(xiàn)Socket請求,具體內(nèi)容如下:PART3區(qū)塊鏈節(jié)點(diǎn)的定時(shí)通信實(shí)現(xiàn)方法基于Flask-APScheduler定時(shí)器(1)安裝使用pip工具可完成操作,具體操作如下:$pipinstallflask-apscheduler(2)創(chuàng)建定時(shí)器①
通過配置的方式創(chuàng)建定時(shí)器② 以裝飾器的方式創(chuàng)建定時(shí)器感謝觀看單元五基于Socket的區(qū)塊鏈P2P網(wǎng)絡(luò)通信PART1P2P通信基礎(chǔ)基礎(chǔ)概念P2P的英文全稱為peer-to-peer,中文全稱為對等式網(wǎng)絡(luò),又稱點(diǎn)對點(diǎn)技術(shù),是無中心服務(wù)器、依靠用戶群(peers)交換信息的互聯(lián)網(wǎng)體系。Socket通信與傳統(tǒng)網(wǎng)絡(luò)通信方式類似,Socket的通信主體包括客戶端和服務(wù)端。在客戶端和服務(wù)端均創(chuàng)建Socket對象后,雙方就可以實(shí)現(xiàn)數(shù)據(jù)通信。在數(shù)據(jù)傳輸方面,服務(wù)端將開啟一個(gè)輪詢機(jī)制,不斷監(jiān)聽客戶端發(fā)送的請求,并根據(jù)請求信息給予響應(yīng)PART2構(gòu)建區(qū)塊鏈P2P網(wǎng)絡(luò)通信通信實(shí)現(xiàn)方式基于Socket可以實(shí)現(xiàn)P2P網(wǎng)絡(luò)通信?;赑2P網(wǎng)絡(luò)通信原理,每個(gè)屬于P2P網(wǎng)絡(luò)的節(jié)點(diǎn)同時(shí)具備數(shù)據(jù)發(fā)送和數(shù)據(jù)接收的功能。那么,可以在每個(gè)節(jié)點(diǎn)上同時(shí)構(gòu)建客戶端和服務(wù)端,實(shí)現(xiàn)點(diǎn)對點(diǎn)通信構(gòu)建步驟第一步,創(chuàng)建socket1.py(存放節(jié)點(diǎn)1即socket1代碼)、socket2.py(存放節(jié)點(diǎn)2即socket2代碼)。第二步,分別在Python文件中放入包含Socket客戶端和服務(wù)端的代碼。第三步,分別啟動socket1和socket2節(jié)點(diǎn)。第四步,驗(yàn)證代碼正確性。PART2功能代碼實(shí)現(xiàn)感謝觀看單元五Gossip的基本概念
PART1Gossip基本概念相關(guān)背景
與中心化系統(tǒng)不同,區(qū)塊鏈網(wǎng)絡(luò)由于采用了P2P通信,網(wǎng)絡(luò)中不存在中心節(jié)點(diǎn),網(wǎng)絡(luò)中的節(jié)點(diǎn)既可以充當(dāng)數(shù)據(jù)發(fā)送節(jié)點(diǎn)s也可充當(dāng)數(shù)據(jù)接收節(jié)點(diǎn),一方面這提高了區(qū)塊鏈的健壯性,但這也加大了區(qū)塊鏈網(wǎng)絡(luò)的管理難度。為了合理管控節(jié)點(diǎn)的數(shù)據(jù)通信,區(qū)塊鏈采用包括Gossip、kedemlia等協(xié)議規(guī)定數(shù)據(jù)通信準(zhǔn)則,提高傳輸效率。Gossip的基本概念
Gossip英譯的結(jié)果為“流言”。受現(xiàn)實(shí)社會中流言蜚語或病毒的傳播方式啟發(fā),Gossip在控制數(shù)據(jù)傳輸?shù)奶攸c(diǎn)為在計(jì)算機(jī)網(wǎng)絡(luò)中,節(jié)點(diǎn)只能隨機(jī)地與周圍節(jié)點(diǎn)通信,在經(jīng)過一段時(shí)間雜亂通信后最終形成數(shù)據(jù)通信的動態(tài)穩(wěn)定。Gossip與P2P的關(guān)系Gossip是區(qū)塊鏈網(wǎng)絡(luò)信息傳輸?shù)耐ㄐ拍J絽^(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)間使用P2P的方式進(jìn)行數(shù)據(jù)傳輸node1node2node3node5node4P2PP2PP2PP2PP2PGossip機(jī)制PART2Gossip的通信模式Pull模式在此模式下,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)都將不斷向相鄰節(jié)點(diǎn)發(fā)送詢問請求,詢問是否有新數(shù)據(jù),相鄰節(jié)點(diǎn)收到詢問請求后將給予回復(fù),若有新數(shù)據(jù)則會將數(shù)據(jù)打包在回復(fù)中發(fā)送。假設(shè)有節(jié)點(diǎn)A和與其相鄰的B、C、D節(jié)點(diǎn),那么Pull模式的具體實(shí)現(xiàn)步驟如下。(1)節(jié)點(diǎn)A以固定時(shí)間間隔T,循環(huán)發(fā)出詢問請求,詢問請求的內(nèi)容為“是否有新數(shù)據(jù)?”,每次循環(huán)將隨機(jī)選取相鄰節(jié)點(diǎn)發(fā)送詢問請求。(2)相鄰節(jié)點(diǎn)收到詢問請求將檢索本節(jié)點(diǎn)存儲的數(shù)據(jù),若存在新數(shù)據(jù)則會將其打包進(jìn)請求對應(yīng)的回復(fù)中。(3)節(jié)點(diǎn)B、C、D將執(zhí)行與節(jié)點(diǎn)A相同的操作。Push模式在此模式下,節(jié)點(diǎn)會向相鄰節(jié)點(diǎn)以循環(huán)的方式發(fā)送消息,相鄰節(jié)點(diǎn)在接收到消息后將判斷是否存在新數(shù)據(jù),若存在新數(shù)據(jù)則會保存。假設(shè)有節(jié)點(diǎn)A和與其相鄰的B、C、D節(jié)點(diǎn),那么Push模式的具體實(shí)現(xiàn)步驟如下。(1)節(jié)點(diǎn)A以循環(huán)的方式隨機(jī)選取B、C、D節(jié)點(diǎn)發(fā)送消息。(2)相鄰節(jié)點(diǎn)在接收到節(jié)點(diǎn)A的消息后判斷是否存在新數(shù)據(jù),若存在新數(shù)據(jù)則保存。(3)節(jié)點(diǎn)B、C、D將執(zhí)行與節(jié)點(diǎn)A相同的操作。感謝觀看單元五基于Flask-APScheduler實(shí)現(xiàn)定時(shí)器PART1工具相關(guān)基礎(chǔ)內(nèi)容定時(shí)器的作用基于Socket技術(shù),區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)間通信既需要作為服務(wù)端接收消息,也需要作為客戶端發(fā)送消息。作為客戶端的功能主要為發(fā)現(xiàn)鄰居節(jié)點(diǎn)以及告知自身節(jié)點(diǎn)存活。這個(gè)過程需要以定時(shí)的方式實(shí)施,并且包括Gossip等機(jī)制都需要采用定時(shí)的形式開展工作。節(jié)點(diǎn)工作模式(客戶端)定時(shí)器輪詢實(shí)施使用流程(1)安裝使用pip工具可完成操作,具體操作如下:$pipinstallflask-apscheduler(2)創(chuàng)建定時(shí)器①
通過配置的方式創(chuàng)建定時(shí)器② 以裝飾器的方式創(chuàng)建定時(shí)器PART2定時(shí)器的實(shí)現(xiàn)形式通過配置的方式創(chuàng)建定時(shí)器JOBS=[{'id':'job1','func':'scheduler:task','args':(1,2),'trigger':'interval','seconds':10}]配置說明:func:表示需要啟動的函數(shù)(文件名:函數(shù)名);args:表示啟動函數(shù)需要傳入的參數(shù);trigger:表示觸發(fā)方式,這里使用interval表示間隔觸發(fā);second:表示間隔的時(shí)間(單位為秒)。通過裝飾器的方式創(chuàng)建定時(shí)器@scheduler.task('interval',id='do_job_1',seconds=30
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DBJ51-T 190-2022 四川省裝配式支吊架抗震技術(shù)標(biāo)準(zhǔn)
- 2024年大學(xué)創(chuàng)新創(chuàng)業(yè)工作總結(jié)
- 《我的時(shí)間管理分享》課件
- 《村鎮(zhèn)銀行介紹》課件
- 新媒體春分營銷策略
- 酒店前臺話務(wù)員工作總結(jié)
- 企業(yè)生涯規(guī)劃圖譜
- 2023-2024年項(xiàng)目部安全培訓(xùn)考試題及答案往年題考
- 2023年-2024年項(xiàng)目部管理人員安全教育培訓(xùn)試題及答案(各地真題)
- 化工生產(chǎn)實(shí)習(xí)報(bào)告合集十篇
- 【9道期末】安徽省宣城市2023-2024學(xué)年九年級上學(xué)期期末道德與法治試題(含解析)
- 《工程造價(jià)專業(yè)應(yīng)用型本科畢業(yè)設(shè)計(jì)指導(dǎo)標(biāo)準(zhǔn)》
- 倉庫主管2025年終總結(jié)及2025工作計(jì)劃
- 2024年01月11396藥事管理與法規(guī)(本)期末試題答案
- 股權(quán)投資協(xié)議的風(fēng)險(xiǎn)控制
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 物理 含解析
- 裝卸工安全培訓(xùn)課件
- 中成藥學(xué)完整版本
- 安全與急救學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024-2025學(xué)年度廣東省春季高考英語模擬試卷(解析版) - 副本
- 2024電力安全工器具及小型施工機(jī)具預(yù)防性試驗(yàn)規(guī)程
評論
0/150
提交評論