单元五 区块链中节点间的通信_第1页
单元五 区块链中节点间的通信_第2页
单元五 区块链中节点间的通信_第3页
单元五 区块链中节点间的通信_第4页
单元五 区块链中节点间的通信_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单元五区块链中节点间的通信CommunicaitoninNodesPART1区块链网络基础公有链区块链网络一般具有数量多、分布广、自治以及开发自由等特点,一般采用P2P对等网络通信的方式区块链网络中的节点均会承担网络路由、验证数据、传播数据以及发现节点等功能采用的网络拓扑结构为Mesh网络(即网状拓扑结构)联盟链区块链网络适用于企业间进行高频的数据交换以及工业生产中存在的高频数据记录等业务将多个参与者构建为独立的联盟,在联盟内的成员采用区块链的形式管理数据联盟与联盟间将以物理的形式实现“数据隔离”,降低区块链网络的拓扑复杂,提升效率私有链区块链网络集中于公司或组织的内部使用,类似于传统中心化网络构建私有链网络,所有数据都保存于一个中心节点中。借助区块链技术实现数据的安全和隐私保护PART2Networkx实现区块链网络绘制区块链网络1.安装Networkx确保Python版本为3.6+,使用pip可直接安装,确保具体命令如下:$pipinstallnetworkx若要升级到较新版本,请使用--upgrade,具体操作如下:$pipinstall--upgradenetworkx绘制区块链网络2.创建图形(Graph)使用工具的第一步,创建一个没有节点和边的空图形,具体代码如下:importnetworkxasnxG=nx.Graph()绘制区块链网络3.添加节点(Node)(1)直接添加节点如下为直接添加一个节点的代码示例:G.add_node(1)(2)通过可迭代对象添加节点如下为添加的代码示例:G.add_nodes_from([2,3])绘制区块链网络4.添加边(Edge)(1)直接添加如下为直接添加边的代码示例:G.add_edge(1,2)(2)通过可迭代对象添加如下为具体代码示例:G.add_edges_from([(1,2),(1,3)])绘制区块链网络5.检查图的元素信息

完成图、节点和边信息添加后,可通过相关方法检查。具体操作如下:print(list(G.nodes))#显示图中的节点信息print(list(G.edges))#显示图中的边信息print(G.number_of_nodes())#显示图中节点数量print(G.number_of_edges()) #显示图中边数量print(G.nodes()[1])#获取名称为1的节点完整信息绘制区块链网络6.从图中删除元素如下代码可实现从已存在的图中删除节点和边:G.remove_node(2)#删除名称为2的节点G.remove_edge(1,3)#删除节点1和节点3的边绘制区块链网络7.向图形、节点和边缘添加属性(1)向图形添加属性通过向nx.Graph()函数中添加参数可以实现属性的添加具体的属性设置和获取代码如下:G=nx.Graph(name="test_network")print(G.graph['name'])或者可以直接通过G.graph设置图形的属性,具体代码如下:G.graph['location']='china'print(G.graph['location'])绘制区块链网络7.向图形、节点和边缘添加属性(2)向节点添加属性与图形添加属性的方法类似,节点添加也有两种方式,具体代码示例如下:G.add_node(4,name='test4')#直接添加节点和对应属性G.add_nodes_from([5,6],location='jiangsu')#通过迭代的方式添加节点和属性print(list(G.nodes.data()))#输出添加节点后的节点及属性信息绘制区块链网络7.向图形、节点和边缘添加属性(3)向边添加属性参照图形以及节点的属性添加方法,边设置属性可以有如下代码示例:G.add_edge(4,5,weight=4)#直接添加边属性G.add_edges_from([(1,2,{'color':'blue'}),(4,6,{'weight':'5'})])#通过添加可迭代对象G[1][2]['weight']=8#给已存在的边添加属性绘制区块链网络8.绘制简单网络如下代码为使用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()实战练习:绘制不同类型的区块链网络1.练习目标使用networkx绘制不同类型的区块链网络,包括公有链网络、联盟链网络以及私有链网络。2.任务内容(1)使用networkx工具绘制私有链区块链网络,并保存绘制结果。(2)使用networkx工具绘制联盟有链区块链网络,并保存绘制结果。(3)使用networkx工具绘制公有链区块链网络,并保存绘制结果。感谢观看单元五区块链中节点间的通信CommunicaitoninNodesPART1P2P网络通信基础概念P2P的英文全称为peer-to-peer,中文全称为对等式网络,又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系。Socket通信Socket通过中文直译为“套接字”,是在P2P网络通信常用的通信手段。从原理上讲,Socket并不是一种通信协议而是一个介于应用层与传输层之间的抽象层TCP/IP参考模型Socket通信与传统网络通信方式类似,Socket的通信主体包括客户端和服务端。在客户端和服务端均创建Socket对象后,双方就可以实现数据通信。在数据传输方面,服务端将开启一个轮询机制,不断监听客户端发送的请求,并根据请求信息给予响应PART2P2P网络通信的程序实现基于Socket实现P2P通信1.创建Socket服务端(1)安装依赖使用pip可以安装依赖包,具体操作如下:#首先安装flask依赖$pipinstallflask#再安装flask-socketio依赖$pipinstallflask-socketio基于Socket实现P2P通信1.创建Socket服务端(2)创建socket接口并启动基于Socket实现P2P通信2.创建Socket客户端(1)安装依赖使用pip执行以下操作进行安装,具体操作如下:$pipinstall"python-socketio[client]"基于Socket实现P2P通信2.创建Socket客户端(2)实现Socket请求根据如下代码可实现Socket请求,具体内容如下:PART3区块链节点的定时通信实现方法基于Flask-APScheduler定时器(1)安装使用pip工具可完成操作,具体操作如下:$pipinstallflask-apscheduler(2)创建定时器①

通过配置的方式创建定时器② 以装饰器的方式创建定时器感谢观看单元五基于Socket的区块链P2P网络通信PART1P2P通信基础基础概念P2P的英文全称为peer-to-peer,中文全称为对等式网络,又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系。Socket通信与传统网络通信方式类似,Socket的通信主体包括客户端和服务端。在客户端和服务端均创建Socket对象后,双方就可以实现数据通信。在数据传输方面,服务端将开启一个轮询机制,不断监听客户端发送的请求,并根据请求信息给予响应PART2构建区块链P2P网络通信通信实现方式基于Socket可以实现P2P网络通信。基于P2P网络通信原理,每个属于P2P网络的节点同时具备数据发送和数据接收的功能。那么,可以在每个节点上同时构建客户端和服务端,实现点对点通信构建步骤第一步,创建socket1.py(存放节点1即socket1代码)、socket2.py(存放节点2即socket2代码)。第二步,分别在Python文件中放入包含Socket客户端和服务端的代码。第三步,分别启动socket1和socket2节点。第四步,验证代码正确性。PART2功能代码实现感谢观看单元五Gossip的基本概念

PART1Gossip基本概念相关背景

与中心化系统不同,区块链网络由于采用了P2P通信,网络中不存在中心节点,网络中的节点既可以充当数据发送节点s也可充当数据接收节点,一方面这提高了区块链的健壮性,但这也加大了区块链网络的管理难度。为了合理管控节点的数据通信,区块链采用包括Gossip、kedemlia等协议规定数据通信准则,提高传输效率。Gossip的基本概念

Gossip英译的结果为“流言”。受现实社会中流言蜚语或病毒的传播方式启发,Gossip在控制数据传输的特点为在计算机网络中,节点只能随机地与周围节点通信,在经过一段时间杂乱通信后最终形成数据通信的动态稳定。Gossip与P2P的关系Gossip是区块链网络信息传输的通信模式区块链网络节点间使用P2P的方式进行数据传输node1node2node3node5node4P2PP2PP2PP2PP2PGossip机制PART2Gossip的通信模式Pull模式在此模式下,网络中的所有节点都将不断向相邻节点发送询问请求,询问是否有新数据,相邻节点收到询问请求后将给予回复,若有新数据则会将数据打包在回复中发送。假设有节点A和与其相邻的B、C、D节点,那么Pull模式的具体实现步骤如下。(1)节点A以固定时间间隔T,循环发出询问请求,询问请求的内容为“是否有新数据?”,每次循环将随机选取相邻节点发送询问请求。(2)相邻节点收到询问请求将检索本节点存储的数据,若存在新数据则会将其打包进请求对应的回复中。(3)节点B、C、D将执行与节点A相同的操作。Push模式在此模式下,节点会向相邻节点以循环的方式发送消息,相邻节点在接收到消息后将判断是否存在新数据,若存在新数据则会保存。假设有节点A和与其相邻的B、C、D节点,那么Push模式的具体实现步骤如下。(1)节点A以循环的方式随机选取B、C、D节点发送消息。(2)相邻节点在接收到节点A的消息后判断是否存在新数据,若存在新数据则保存。(3)节点B、C、D将执行与节点A相同的操作。感谢观看单元五基于Flask-APScheduler实现定时器PART1工具相关基础内容定时器的作用基于Socket技术,区块链网络中节点间通信既需要作为服务端接收消息,也需要作为客户端发送消息。作为客户端的功能主要为发现邻居节点以及告知自身节点存活。这个过程需要以定时的方式实施,并且包括Gossip等机制都需要采用定时的形式开展工作。节点工作模式(客户端)定时器轮询实施使用流程(1)安装使用pip工具可完成操作,具体操作如下:$pipinstallflask-apscheduler(2)创建定时器①

通过配置的方式创建定时器② 以装饰器的方式创建定时器PART2定时器的实现形式通过配置的方式创建定时器JOBS=[{'id':'job1','func':'scheduler:task','args':(1,2),'trigger':'interval','seconds':10}]配置说明:func:表示需要启动的函数(文件名:函数名);args:表示启动函数需要传入的参数;trigger:表示触发方式,这里使用interval表示间隔触发;second:表示间隔的时间(单位为秒)。通过装饰器的方式创建定时器@scheduler.task('interval',id='do_job_1',seconds=30

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论