对等网络中信息缓存与推送的方法、装置及系统与流程

文档序号:18180703发布日期:2019-07-17 05:10阅读:191来源:国知局
对等网络中信息缓存与推送的方法、装置及系统与流程

本发明涉及网络通信技术,特别涉及对等网络中信息缓存与推送的方法、装置及系统。



背景技术:

现有的信息推送技术中,不同用户在同一个服务器上进入同一个通道后可进行即时的消息、状态的推送,即用户消息、状态被发送到服务器,服务器再向同一通道下的其他用户进行推送。所述技术为标准的客户/服务器结构,其服务端具有一定复合,需要配置服务器,就会产生服务器的购置、维护等的费用,还需要专门的人员管理,成本较高。所述技术还存在不支持消息缓存的问题。

P2P(对等网络),是一种通信网络中各方互为客户机或服务器的模式。典型的对等网络,包括若干节点,每个节点都具有查找、路由等功能,可直接与其他节点交互。对等网络一般是基于DHT(Distributed Hash Table,分布式哈希表)技术,如Chord,CAN,Pastry等,来组织网络中的节点构建网络拓扑的。

对等网络中,节点发布资源的过程是将本地保存的资源指定网络中唯一的索引——键值(key),将静态信息(value)发布到网络上,根据特定的规则找到负责存储该静态信息的节点,并将静态信息保存在该节点的发布资源列表中。节点获取资源的过程是将本地需要的资源,以键值表示在网络中查找并获取资源。当节点请求某一内容时,向对等网络发起消息,查找键值所对应的静态信息。根据特定的P2P规则路由到负责存放该键值的节点,存放该键值的节点索引自己的发布资源列表,得到相应的静态信息后,返给请求节点。

不同于客户/服务器结构,对等网络中,节点能力通常不会很强,无法与服务器相比,因此无法直接应用现有的信息推送技术。

申请人的在先中国专利申请201510461312.7提出了基于对等网络分布式哈希表的visit协议系统和通信方法。其中,Visit协议基于实现了分布式哈希表的对等网络,该对等网络中所采用的特定的规则是kademia算法。kademia算法可以为接入网络中的任何计算机通过指定的key_id找到基本相同的数个目标机器。kademia算法与分布式哈希表都是公开的现有技术。

如图1所示,是基于对等网络分布式哈希表的visit协议系统中作为请求端或作为服务端的网络节点的结构示意图。visit协议系统包括若干网络节点,所述网络节点包括DHT模块10、与DHT模块10连接的请求模块20和/或服务模块30。

请求模块20用于发起访问请求,向服务模块30发送包含至少一个访问请求的请求包,接收服务模块30发送的权限验证请求包,向服务模块30发送权限验证响应包,接收服务模块30发送的回复响应包。

服务模块30用于接收所述请求包,向请求模块20发送所述权限验证请求包,接收所述权限验证响应包并验证权限,验证通过后处理所述访问请求,构造回复响应包并发送至请求模块20。所述回复响应包包含对应所述访问请求的回复响应。

优选地,服务模块30利用请求模块20所生成的公私钥对对所述请求包进行权限认证。请求模块20根据所述公私钥对中的公钥生成所述visit协议系统中每个网络节点的DHT模块10对应于所述请求模块20的键值key_id。

优选地,所述键值key_id为所述公钥的散列值。

优选地,请求模块20还用于在所述请求包中申明所述公私钥对中私钥的权限,在接收公钥请求后向服务模块30推送所述公私钥对中的公钥。

服务模块30还用于在收到私钥权限申明后检查是否拥有公钥,如没有则向请求模块20推送公钥请求。

优选地,所述权限验证请求包中包含有利用所述公钥加密的权限验证信息;

所述权限验证响应包中包含有利用所述私钥对所述权限验证信息进行解密后计算得到的权限证明信息。

优选地,所述权限验证信息为服务模块30利用所述公钥加密的随机串。

所述权限证明信息为请求模块20利用所述私钥对所述权限验证信息进行解密后,计算得到的所述随机串的哈希值。

请求模块20利用kademia算法,通过指定的键值key_id查找到对应的网络节点,将所述请求包发送至所查找到网络节点的服务模块30。

服务模块30根据所述请求包的发送路径逆向发送所述回复响应包,将所述回复响应包发送至发送所述请求包的请求模块20。

优选地,所述网络节点还包括与请求模块20连接,用于处理所述回复响应包的上层业务逻辑模块40。

优选地,请求模块20收到所述n个网络节点的服务模块30分别返回的回复响应包,由对应的上层业务逻辑模块40或对应的扩展协议请求模块50执行响应去重处理。

优选地,所述visit协议系统还包括至少一个扩展协议请求模块50,和与所述扩展协议请求模块对应的扩展协议服务模块60。

扩展协议请求模块50,与请求模块20连接,其调用所述请求包的接口函数在所述请求包中添加访问请求,利用所述请求包的回调函数分别调取所述回复响应包中对应所述访问请求的回复响应,并处理所述回复响应。

扩展协议服务模块60,与服务模块40连接,其分别处理对应的所述访问请求,并在所述回复响应包中添加回复响应。

所述访问请求包含标签(tag)。tag由扩展协议名名称、分隔符和附加字段组成,例如“chl.xxxx”。

优选地,所述请求包含有用于标识所述请求包的包编号package_id,所述访问请求含有用于标识所述访问请求的请求编号request_index。所述回复响应包通过所述包编号package_id指定对应的请求包,所述回复响应通过所述请求编号request_index指定对应的访问请求。

优选地,服务模块30还包括以下任意一项:用于在向请求模块20发送回复响应包的同时发送推送响应包;用于在向请求模块20发送回复响应包的同时向其它网络节点的请求模块20发送推送响应包;用于在向请求模块20发送回复响应包之后,向请求模块20发送推送响应包。

Visit协议具有如下关键特性:Visit协议支持将多个扩展协议的访问请求进行封包。Visit协议可以组群发的形式将请求包指定键值key_id后进行发送。也可指定目标机器直接发送。Visit协议在将请求/响应交予扩展协议处理时会附带包的基础信息、发送者信息。Visit服务还会附带请求端是否通过了拥有键值key_id对应私钥的验证。可用包编号package_id标识Visit协议请求包。可用包编号package_id与请求编号request_index联合标识单个访问请求。

Visit协议为本发明的对等网络中信息缓存与推送技术的实现提供了技术基础。



技术实现要素:

本发明的目的在于提供一种能在对等网络中实现信息缓存与推送的方法、装置及系统。

根据本发明的一个方面,提供一种对等网络中信息缓存与推送的方法,其包括以下步骤:请求处理与响应:根据收到的请求的类型,更新所存储的信息队列、侦听队列,向发送请求的请求端进行回复响应、推送响应,所述信息队列、侦听队列对应于特定的一键值与一标签,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议。

根据本发明的一个方面,提供一种对等网络中信息缓存与推送的装置,其包括:数据存储单元:用于存储信息队列、侦听队列,所述信息队列、侦听队列对应于特定的一键值与一标签,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议;请求处理与响应单元:用于根据收到的请求的类型,更新所存储的信息队列、侦听队列,向发送请求的请求端进行回复响应、推送响应。

根据本发明的一个方面,提供一种对等网络中信息发布与获取的方法,其包括以下步骤:生成请求:生成涉及信息操作或侦听操作的请求;发送请求:指定共同的键值与标签进行上述生成的请求的发送,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议、信息操作的权限。

根据本发明的一个方面,提供一种对等网络中信息发布与获取的装置,其包括:请求生成单元:用于生成涉及信息操作或侦听操作的请求;请求发送单元:用于指定共同的键值与标签进行上述生成的请求的发送,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议。

根据本发明的一个方面,提供一种对等网络中信息缓存与推送方法,其包括:若干第一对等节点生成涉及信息操作或侦听操作的请求,并指定共同的键值与标签进行请求的发送,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议;若干第二对等节点存储信息队列、侦听队列,并根据所收到的第一对等节点的请求的类型,更新所存储的信息队列、侦听队列,向第一对等节点进行回复响应、推送响应,所述信息队列、侦听队列对应于所述指定的共同的键值与标签,所述第二对等节点为对等网络通过键值所找到的节点。

根据本发明的一个方面,提供一种对等网络中信息缓存与推送系统,其包括:若干第一对等节点,构成请求端,包括:请求生成单元,用于生成涉及信息操作或侦听操作的请求;请求发送单元,用于指定共同的键值与标签进行请求的发送,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议;若干第二对等节点,为对等网络通过键值所找到的节点,构成服务端,包括:数据存储单元,用于存储信息队列、侦听队列,所述信息队列、侦听队列对应于所述指定的共同的键值与标签;请求处理与响应单元,用于根据所收到的第一对等节点的请求的类型,更新所存储的信息队列、侦听队列,向第一对等节点进行回复响应、推送响应。

本发明的有益效果包括:

本发明所提供的对等网络中信息缓存与推送的方法、装置及系统,其服务端进行如下操作:请求处理与响应:根据收到的请求的内容,更新所存储的信息队列、侦听队列,向发送请求的请求端进行回复响应、推送响应。所述信息队列、侦听队列对应于特定的一键值(key_id)与一标签(tag),其中key_id为对等网络中访问DHT的键,tag标识对应的扩展协议;

本发明在服务端通过信息队列存储、更新对应于特定的key_id与tag的信息(消息与状态),实现了消息、状态的缓存;在服务端通过侦听队列存储、更新注册侦听的请求端信息,据此以在信息更新时向注册了侦听的请求端进行新信息的推送。由此实现了对等网络中信息的缓存与推送。

相对于现有的信息推送技术,本发明的技术方案不需要配置服务器,不产生该项费用,也不需要专门的人员来进行管理,节省了人力。本发明适用于对等网络,其利用互联网上的现有的广大的用户、设备资源,是很经济的设计,并且充分利用了资源,使用前景广阔。

此外,本发明基于对等网络实现了支持信息的缓存与推送的方法和系统。使得在对等网络上很多高级应用的实现更加容易(譬如聊天、博客、论坛等)。

将需缓存/推送的信息区分为消息与状态。这种区分使得该协议适用于各种不同的应用场景。

基于Visit协议提供的身份认证功能,本发明启用该功能对消息与状态的存取进行控制,在访问中通过公开方式,即标签(tag)中标识的信息操作的权限,对信息的写入与获取分别进行权限区分。该设计使得各请求端与服务端对于特定tag的权限限制可以达成一致,从而使权限在陌生节点间也具有公信力。

在返回消息的响应中附带该消息的标识信息(本发明中为写入消息的请求包编号与写入请求在请求包中的编号)。基于DHT架构的推送需要对多个服务端返回的响应信息进行去重。该设计使得接受响应的请求端可通过这一标识信息对不同服务端重复返回的消息数据可靠的进行去重。

在返回状态的响应中附带访问请求的时间信息(本发明中为申明状态时附带的请求端时间)。基于DHT架构的推送需要对多个服务端返回的响应信息进行去重。该设计使得接受响应的请求端可通过这一标识信息对不同服务端重复返回的状态数据进行有效性判断。

附图说明

图1为现有技术的基于对等网络分布式哈希表的visit协议系统中,作为请求端或作为服务端的网络节点的结构示意图;

图2是本发明对等网络中信息缓存与推送系统中服务端的操作流程图;

图3是本发明对等网络中信息缓存与推送方法的流程图;

图4是本发明对等网络中信息缓存与推送系统中第一对等节点的结构示意图;

图5是本发明对等网络中信息缓存与推送系统中第二对等节点的结构示意图;

图6是本发明对等网络中信息缓存与推送系统中服务端的请求处理与响应流程图;

图7是本发明对等网络中信息缓存与推送系统中服务端判断请求所涉及的操作是否需要权限的流程图。

具体实施方式

本发明中描述的对等网络中信息缓存与推送的方法、装置及系统是基于Visit协议的扩展技术。其适用于对等网络。

为说明方便定义以下术语:

●网络节点:构成对等网络的节点。以节点id标识。

●键值(key_id):访问DHT的键。

●DHT(分布式哈希表):对等网络中的寻找节点的一种算法。通过指定key_id与分支因子n可以找到n个节点,不同节点使用相同的key_id与n所找到的节点列表基本一致。通过kademia算法已实现了一个分布式哈希表。

●Visit协议:基于DHT寻址的通信协议。由请求端发送visit请求,服务端进行响应。

●请求端:发出Visit请求的功能模块。可与服务端存在于同一网络节点中。

●服务端:接受并处理Visit请求的功能模块。可与请求端存在于同一网络节点中。

●Visit请求包:请求端向服务端发出的Visit协议包。

●Visit响应包:服务端向请求端发出的Visit协议包。

●散列:即哈希(Hash)。将一段数据进行散列后可以得到一个定长的散列值。本发明中优选采用散列算法SHA256,通常认为该算法不可逆,且通过不同数据块得出的散列值不会重复。

●访问请求:请求端向服务端发送的一次访问请求。一个Visit包中可封入多个访问请求。

●回复响应:服务端向请求端发送的访问请求对应的回复。

●推送响应:服务端向请求端主动推送的协议包。

●申明者:向服务端申明了状态的对象。依据需求同一个请求端可以有多个申明者。

●侦听者:向服务端发送了侦听消息或状态的请求端。

在此再定义一下通道(Channel),这是本申请提出的一个抽象概念。通道是基于一个共同的key_id的数据交互的抽象的会话场所。采用Visit协议中的key_id与tag共同标识一个channel,区分各channel,各channel间相互独立。tag用于标识channel的一些元信息,所述元信息包括对应的扩展协议、信息操作的权限定义。不同请求端通过对同一个channel访问进行交互,同一个channel中发送的包含访问请求的Visit请求包均需指定该共同的key_id与tag。

Channel中的数据传送如下:基于kademia算法,每个channel的数据均存放在当前网络中节点id最靠近key_id的数个节点上。任何节点均可对Channel发送访问请求,基于Visit协议,发起访问请求的节点,即请求端,会将访问请求封入Visit请求包,并将请求包指定key_id同时向最靠近key_id的数个节点进行发送,所述数个节点,即服务端,对请求包及其内封存的请求分别独立处理/存储,向请求端发送Visit响应包,Visit响应包中可封入回复响应或推送响应。

根据Visit协议,请求端可向服务端注册不同名称的扩展协议来处理不同类型的访问请求。任何请求端的扩展协议请求模块都可以通过向特定接口函数传入下述参数来向请求包中添加访问请求以构建请求包:

tag:指明扩展协议;

请求数据(request_data):访问请求及其相关数据,Visit协议会将请求数据传递至服务端对应的处理该类型访问请求的扩展协议服务模块;

回复响应回调函数:用于处理与访问请求对应的回复响应;

推送响应回调函数:用于处理与访问请求对应的推送响应。

发送请求包:请求包构建完成后,请求端指定与通道对应的该共同的key_id发送请求包。

请求端收到来自服务端的响应包后会为每条回复响应与推送响应调用对应的回调函数,供扩展协议请求模块处理。

扩展协议请求模块处理过程中可以将整个请求包标识为已完成,从而避免请求包处理更多的回复响应。

参阅图2,根据Visit协议,服务端在接收到请求包后进行如下的处理流程:

分发访问请求:根据tag找到该访问请求对应的处理模块,即扩展协议服务模块,并向其中传入:

需响应的请求的基本信息(包含包编号package_id,发送者,接收时间等);

响应请求主体数据;

权限验证标识;

用于发送回复响应与推送响应的信息创建对象。

进行请求处理与响应,包括:

处理访问请求:扩展协议服务模块逐个处理访问请求。

构建响应包:在处理访问请求的过程中,扩展协议服务模块可以通过传入的信息创建对象向响应包中添加回复响应与推送响应。

发送响应包:服务端将请求包处理完成后,将所有回复响应与推送响应分别打包成响应包并发送出去。

参阅图3,显示了本发明的对等网络中信息缓存与推送方法的流程,其中包括:

步骤S101,若干第一对等节点生成涉及信息操作或侦听操作的请求,并指定共同的key_id与tag进行请求的发送,其中key_id为对等网络中访问DHT的键值,tag标识对应的扩展协议,所述第一对等节点构成请求端;

步骤S102,若干第二对等节点进行请求处理与响应,即根据所收到的第一对等节点的请求的类型,更新所存储的信息队列、侦听队列,向第一对等节点进行回复响应、推送响应,所述信息队列、侦听队列对应于所述指定的共同的key_id与tag,所述第二对等节点为对等网络通过key_id所找到的节点,所述第二对等节点构成服务端。

所述tag还标识信息操作的权限,对同一key_id及tag下的信息的操作遵照tag中标识的权限。所述第二对等节点在对请求进行处理时,若根据tag需要相应的权限,则启动公钥获取流程(步骤S103)和验证流程(步骤S104)以确认请求端拥有key_id对应私钥。所述公钥获取流程和验证流程是Visit协议所支持并已公开的内容。

本发明还提供了对等网络中信息缓存与推送的系统,其中包括:若干第一对等节点,构成请求端;若干第二对等节点,为对等网络通过key_id所找到的节点,构成服务端。

参阅图4,显示了请求端的结构。扩展协议请求模块中设置有:请求生成单元,用于生成涉及信息操作或侦听操作的请求;请求发送单元,用于指定共同的key_id与tag进行请求的发送,其中key_id为对等网络中访问DHT的键值,tag标识对应的扩展协议。

参阅图5,显示了服务端的结构。扩展协议服务模块中设置有:数据存储单元,用于存储信息队列、侦听队列,所述信息队列、侦听队列对应于所述指定的共同的key_id与tag;请求处理与响应单元,用于根据所收到的第一对等节点的请求的内容,更新所存储的信息队列、侦听队列,向第一对等节点进行回复响应、推送响应。

根据本发明,服务端提供两种类型的数据缓存与推送服务,一种为消息,一种为状态。对于每个key_id下的每个tag均包含以下数据类型:消息队列、状态列表、消息侦听队列、状态侦听队列,其由数据存储单元存储在服务端。下面对各数据类型分别描述:

●消息队列。包括所有未过期消息,依服务端接收时间排序。对于每条消息包含下述数据:写入该消息的访问请求所在请求包的包编号;写入请求在请求包中的编号,即请求编号;消息内容;服务端接收到该消息的本地时间;该消息在服务端的过期时间。请求包的包编号与写入请求的请求编号共同构成了消息的标识信息,可用于请求端对不同服务端重复返回的消息数据可靠的进行去重。

●状态列表。包括所有状态不为空的申明的状态。对于每条状态包含下述数据:申明者标识;附加信息;最后一次申明的申明状态请求所在请求包的包编号;最后一次申明的请求端时间(该时间可用于其他请求端进行去重);最后一次申明的服务端时间;状态过期时间;最后一次申明的状态。

●消息侦听队列。包括所有未过期的消息侦听请求端信息。

●状态侦听队列。包括所有未过期的状态侦听请求端信息。

消息侦听队列、状态侦听队列中的每个侦听请求端的信息包含下述数据:侦听者标识;侦听者最后一次侦听请求所在请求包的包编号;侦听者最后一次侦听请求在请求包中的编号,即请求编号;侦听者开始侦听的时间;侦听过期的时间;用于推送消息/状态响应的会话(session)对象。

补充说明一下,会话是由最初指定key_id发送请求的请求端建立的,会话对象对应封入该最初的请求的Visit协议请求包。

请求端由请求生成单元生成以下类型的请求,并通过请求发送单元进行发送:

●写入消息:写入一条新消息。该请求包含以下数据:消息内容;消息有效期。

●删除消息:删除已发送的消息。该请求包含以下数据:写入该消息的访问请求所在请求包的包编号;写入请求的请求编号。

●读取消息:读取在服务端缓存的消息。该请求包含以下数据:最小服务端时间。

●侦听消息:注册侦听后服务端在收到新消息时会主动向请求端进行推送。该请求包含以下数据:消息侦听有效期。

●申明状态:该请求包含以下数据:申明者;附加信息;状态;有效期;请求端当前时间。

●读取状态:读取在服务端已申明的状态。

●侦听状态:注册侦听后服务端在有状态变化时会主动向请求端进行推送。该请求包含以下数据:状态侦听有效期。

参阅图6,服务端收到请求后,所述请求处理与响应单元判断请求的类型,并对各种类型的请求进行不同的后续处理,其处理方式如下:

●写入消息:服务端收到写入消息请求后,将该消息存入消息队列。服务端还会将该消息的消息内容及其对应的包编号、请求编号、服务端接收时间这样的相关数据通知消息侦听队列中存放的所有请求端,即进行推送响应,将消息相关数据写入响应包并发送给消息侦听队列中存放的所有请求端。在不发生删除操作的情况下该消息在经过消息有效期后从消息队列中彻底删除。

●删除消息:服务端收到删除消息请求后,进行如下判断和处理:

若该请求未设置写入消息的访问请求所在请求包的包编号,则服务端删除所有消息。

若该请求设置了写入消息的访问请求所在请求包的包编号,未设置写入请求编号,则服务端删除对应请求包写入的所有消息。

若该请求同时设置了写入消息的访问请求所在请求包的包编号与写入请求编号,则服务端删除目标消息。

●读取消息:服务端收到读取消息请求后,向请求端返回服务端接收到消息的本地时间大于等于最小服务端时间的所有消息,即进行回复响应,将该所有消息的消息相关数据写入响应包并发送给请求端。

●注册消息侦听:服务端收到侦听消息请求后,将请求端加入消息侦听列表。当有新消息写入时主动向已注册的请求端推送。

●移除消息侦听:根据服务端收到的侦听消息请求中所设置的消息侦听有效期,在经过该消息侦听有效期后,服务端将该请求端从消息侦听列表中移除。

●申明状态:服务端收到申明状态请求后,根据状态进行如下判断和处理:

若申明状态为空,且原状态列表中无该申明者对应状态,则不作任何处理。

若申明状态为空,且原状态列表中有该申明者对应状态,则删除原状态列表中该申明者对应状态,并将该状态变化推送给所有注册了状态侦听的请求端,即进行推送响应,将该状态的状态内容及申明者标识、请求包编号、请求端时间这样的相关数据写入响应包并发送给状态侦听队列中存放的所有请求端。

若申明状态不为空,且原状态列表中该申明者对应状态与申明状态相同,则更新状态列表中该申明者对应状态数据。

若申明状态不为空,且原状态列表中该申明者对应状态与申明状态不同/不存在,则更新状态列表中该申明者对应状态数据/创建新的该申明者对应状态数据,并将该状态变化推送给所有注册了状态侦听的请求端,即进行推送响应,将该状态的状态内容及申明者标识、请求包编号、请求端时间这样的相关数据写入响应包并发送给状态侦听队列中存放的所有请求端。

●读取状态:服务端收到读取状态请求后,向请求端返回状态列表中所有项,即进行回复响应,将所述所有项状态的状态内容及申明者标识、请求包编号、请求端时间这样的相关数据写入响应包并发送给请求端。

●注册状态侦听:服务端收到侦听状态请求后,将请求端加入状态侦听列表。当有状态变化时主动向已注册的请求端推送。

●移除状态侦听:根据服务端收到的侦听状态请求中所设置的状态侦听有效期,在经过该状态侦听有效期后,服务端将请求端从状态侦听列表中移除。

基于Visit协议提供的身份认证功能,本发明启用该功能对信息——消息与状态——的操作进行控制,在访问中通过公开的tag对信息的写入、删除与获取操作分别进行权限区分。请求端是否拥有key_id对应私钥,所享受的权力是不同的。

Visit协议中设置有tag,tag中包含了扩展协议名与附加字段。本发明定义tag的附加字段的固定位置为权限标志位,用于公示该tag下数据所遵从的读写规则,即tag中包含了权限信息。

例如,权限标志位可以包括以下7个:

●消息读取私钥位:读取/侦听消息是否要求请求端拥有key_id对应私钥

●消息写入私钥位:写入消息是否要求请求端拥有key_id对应私钥

●消息删除私钥位:删除消息是否要求请求端拥有key_id对应私钥

●删除模式位:删除消息时是完全删除还是仅删除消息内容,保留索引信息。

●状态读取私钥位:读取/侦听状态是否要求请求端拥有key_id对应私钥

●状态写入私钥位:申明状态是否要求请求端拥有key_id对应私钥

●私钥否决位:是否启用私钥权限。若不启用,则任何请求端均不具有上述私钥权限,无法进行有关消息、状态的操作。即,若该位被设为1则不检测请求端是否有对应私钥权限,上述权限中规定的需要私钥权限才能进行的操作均为非法操作。

对通道中信息的操作,即对同一key_id及tag下信息的操作,需遵照tag中指定的权限要求。如:

当消息读取私钥位被置为1,私钥否决位被置为0时,无私钥权限的请求端无法进行读取消息或侦听消息的操作。

当消息读取私钥位被置为1,私钥否决位被置为1时,任何请求端无法进行读取消息或侦听消息的操作。

参阅图7,根据tag中的权限信息,服务端收到请求后,所述请求处理与响应单元在判断出请求的类型后,先行判断该请求所涉及的操作是否需要权限:若不需要权限,则进入后续处理,即对该类型的请求进行处理;如需要权限,则需要先行验证请求端是否拥有key_id对应的私钥,拥有私钥,则进入后续处理,没有私钥,则不进入后续处理,优选地,可以提示请求端不具备该操作的权限。

本发明还提供了一种携带一个或多个指令序列的计算机可读媒介,当所述指令由一个或多个处理器执行时,引起所述一个或多个处理器执行服务端的操作,具体包括以下步骤:请求处理与响应。其根据收到的请求的类型,更新所存储的信息队列、侦听队列,向发送请求的请求端进行回复响应、推送响应,所述信息队列、侦听队列对应于特定的一键值与一标签,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议。其中,所述请求处理与响应的步骤如前所述。

本发明还提供了一种携带一个或多个指令序列的计算机可读媒介,当所述指令由一个或多个处理器执行时,引起所述一个或多个处理器执行请求端的操作,具体包括以下步骤:生成请求:生成涉及信息操作或侦听操作的请求;发送请求:指定共同的键值与标签进行上述生成的请求的发送,其中键值为对等网络中访问DHT的键,标签标识对应的扩展协议、信息操作的权限。

下面是本发明的具体实施例。

实施例1

一个分组大小为3,key_id为10010000、tag为tag1的channel上进行的消息侦听->消息写入->消息推送->消息读取->消息删除的具体过程:

当请求端1指定key_id=10010000、tag=tag1发送消息侦听请求时,根据kademia算法,上述请求被路由至节点1、2、3三个节点上进行处理。该三个节点就分别构成了服务端。节点1、2、3分别独立地处理侦听请求:通过tag1包含的扩展协议名在已注册的扩展协议中寻找对应的扩展协议服务模块进行处理,所确定的扩展协议服务模块在消息侦听列表中记录下请求端1的地址。(下文省略描述通过tag1确定扩展协议服务模块的操作,但实际上各服务端接收到Visit请求包后均会进行该操作。)

由于网络节点的不稳定,根据一种可能的情况,节点2脱离网络。节点2脱离网络导致节点4进入了kademia算法的寻址范围。

当请求端2指定key_id=10010000、tag=tag1发送写入消息请求时,根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点1、3、4分别独立地处理写入请求。在节点1、3,之前在消息侦听列表中记录过请求端1的地址,其操作为:在消息队列中记录该消息的内容等相关数据;向侦听列表中记录的请求端1的地址推送该消息。而在节点4,未曾在消息侦听列表中记录过请求端1的地址,其操作为:在消息队列中记录该消息的相关数据,而不向请求端1进行该消息的推送。当然,节点4也会对其消息侦听列表中记录过的请求端进行该消息的推送,只是由于请求端1未在其侦听列表中,因而不向请求端1进行该消息的推送。

之后,请求端1收到来自节点1和节点3的推送消息,根据消息的标识信息(请求端2所发送的写入消息请求的请求包编号与写入请求的请求编号),由上层逻辑去重后进行进一步处理。

当请求端3指定key_id=10010000、tag=tag1发送读取消息请求时,根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点1、3、4分别独立地处理读取请求。其操作为:在消息队列中记录的所有消息内容打包并通过回复响应发送回请求端3。请求端3收到来自节点1、3、4的所有消息内容,根据消息的标识信息(写入消息请求的请求包编号与写入请求的请求编号),由上层逻辑去重后进行进一步处理。

当请求端4指定key_id=10010000、tag=tag1发送消息删除请求时,请求内容中附带了消息的特征(写入该消息的访问请求所在请求包的包编号;写入请求的请求编号)。根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点1、3、4分别独立地处理删除请求。其操作为:在消息队列中查找特征与删除请求中特征相同的消息,若找到则从消息队列中移除该消息。

说明一下,实际key_id与节点id长度非常长,例如目前的实现中为512位。分组大小也会更大一些。

实施例2

一个分组大小为3,key_id为10010000、tag为tag1的channel上进行的状态侦听->状态申明->状态推送->状态读取->移除状态侦听的具体过程:

当请求端1指定key_id=10010000、tag=tag1发送侦听请求时,根据kademia算法,上述请求被路由至节点1、2、3三个节点上进行处理。节点1、2、3分别独立地处理侦听请求:在状态侦听列表中记录下请求端1的地址。

由于网络节点的不稳定,根据一种可能的情况,节点2脱离网络。节点2脱离网络导致节点4进入了kademia算法的寻址范围。

当请求端2指定key_id=10010000、tag=tag1发送申明状态请求时,根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点1、3、4分别独立地处理该请求。在节点1、3,之前在状态侦听列表中记录过请求端1的地址,其操作为:根据状态进行判断,结果为:申明状态不为空,且原状态列表中该申明者对应状态与申明状态不同。进行后续操作:更新状态列表中该申明者对应状态数据,并将该状态变化推送给侦听列表中记录的请求端1。而在节点4,未曾在消息侦听列表中记录过请求端1的地址,其操作为:根据状态进行判断,结果为:申明状态不为空,且原状态列表中该申明者对应状态与申明状态不同。进行后续操作:更新状态列表中该申明者对应状态数据。当然,节点4也会对其状态侦听列表中记录过的请求端进行该状态的推送,只是由于请求端1未在其侦听列表中,因而不向请求端1进行该状态的推送。

请求端1收到来自节点1和节点3的推送状态,根据申明状态请求的时间信息(请求端2所发送的申明状态请求附带的请求端时间),由上层逻辑去重后进行进一步处理。

接下来,请求端2指定key_id=10010000、tag=tag1发送读取状态请求。根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点1、3、4向请求端2返回状态列表中的所有项状态的数据。请求端2收到来自节点1、3、4返回的状态列表中所有项,根据每一项申明状态请求的时间信息(各个请求端所发送的申明状态请求附带的请求端时间),由上层逻辑去重后进行进一步处理。

在经过请求端1的状态侦听请求的有效期后,节点1、2、3将请求端1从状态侦听列表中移除。

实施例3

一个分组大小为3,key_id为10010000、tag为tag1的channel上进行的身份认证、权限控制。

tag1中的权限设置为:消息删除私钥位被置为1,私钥否决位被置为0,其它位均被置为0,也就是说,无私钥的请求端无法进行删除消息的操作,其它操作不区分请求端是否拥有私钥均可进行。请求端1生成公私钥对后,指定key_id=10010000发送由私钥签名的删除消息请求,根据kademia算法,上述请求被路由至节点1、2、3三个节点(服务端)上进行处理。根据Visit协议,节点1、2、3根据tag1中的权限设置,知道删除消息操作需要验证请求端是否拥有私钥,会根据Visit协议进行公钥获取流程和验证流程,将该公钥缓存至本地内存,并通过公钥对签名进行验证,从而确认了请求端1拥有私钥,具有删除消息的权限,节点1、2、3进行删除消息的操作。之后,请求端2指定key_id=10010000、tag=tag1发送未签名的删除消息请求,由于该请求未签名,而tag中指明删除操作需要持有私钥,因此该请求将被拒绝,节点1、2、3不进行删除消息的操作。此后,节点2脱离网络,节点4进入了kademia算法的寻址范围。此后,请求端1指定key_id=10010000、tag=tag1发送带私钥签名的删除消息请求。根据kademia算法,上述请求被路由至节点1、3、4三个节点上进行处理。节点4根据tag1中的权限设置,进行公钥获取流程和验证流程,将该公钥缓存至本地内存,并通过公钥对签名进行验证,从而确认了请求端1拥有私钥,具有删除消息的权限,节点4进行删除消息的操作。节点1、3根据tag1中的权限设置,通过本地缓存的公钥验证签名后,进行删除消息的操作,也就是说,由于本地缓存了公钥,节点1、3不需要进行公钥获取流程,只需进行验证流程。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1