CN107800707B - 扩展thrift协议读取方法、读取装置以及电子设备 - Google Patents
扩展thrift协议读取方法、读取装置以及电子设备 Download PDFInfo
- Publication number
- CN107800707B CN107800707B CN201711078359.0A CN201711078359A CN107800707B CN 107800707 B CN107800707 B CN 107800707B CN 201711078359 A CN201711078359 A CN 201711078359A CN 107800707 B CN107800707 B CN 107800707B
- Authority
- CN
- China
- Prior art keywords
- protocol
- custom
- request
- thrift
- initial
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/03—Protocol definition or specification
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/06—Notations for structuring of protocol data, e.g. abstract syntax notation one [ASN.1]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/12—Protocol engines
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
Abstract
本发明实施例提供了一种扩展thrift协议方法、读取方法、装置以及电子设备。其中扩展thrift协议方法包括:在初始thrift协议的消息头与参数之间,增加自定义字段;在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为自定义协议请求。本发明实施例的一种扩展thrift协议方法、读取方法、装置以及电子设备,实现了扩展任意一种thrift协议,且兼容初始thrift协议的客户端以及服务端。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种扩展thrift协议方法、读取方法、装置以及电子设备。
背景技术
Thrift是一个可扩展且跨语言服务开发的软件框架。它结合了功能强大的软件堆栈和代码生成引擎。Thrift框架具有自己内部定义的传输协议规范和传输数据标准,即Thrift协议。在传输协议上总体划分为文本和二进制传输协议。为节约带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数。例如,对二进制编码格式进行数据传输的TBinaryProtocol;对传输的二进制数据高度压缩的TCompactProtocol。Thrift二进制协议使用方便效率高的基本特性,使其广泛用在了RPC(Remote Procedure Call Protocol,远程过程调用协议) 服务上。
在提倡微服务的今天,RPC服务除了基本的通信,往往还需要增加各种高级功能,如调用链分析,性能指标监控等等。而这些高级功能的实现,都依赖于上下游服务能够互相发送自定义的数据。
然而,发明人在实现本发明的过程中发现,现有技术至少存在如下问题:
由于Thrift协议高度压缩的二进制特性,导致它的扩展性很差。例如现有技术中,对于thrift协议中的TBinaryProtocol可以利用空闲的4个字节发送一些自定义数据,然而由于TBinaryProtocol的空闲字节有限,不能添加更多的自定义数据。对于压缩比更高的TCompactProtocol由于没有空闲字节,则不可添加自定义数据。
综上所述,现有技术的Thrift协议中各服务协议,在服务端和客户端完成基本的RPC调用的同时很难发送自定义的信息,因此,限制了Thrift协议的扩展性。
发明内容
本发明实施例的目的在于提供一种扩展thrift协议方法、读取方法、装置以及电子设备,以实现扩展任意一种thrift协议,且兼容初始thrift协议的客户端以及服务端。具体技术方案如下:
在本发明实施例的第一方面,公开了一种扩展thrift协议方法,包括:
在初始thrift协议的消息头与参数之间,增加自定义字段;
在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为自定义协议请求。
可选地,当在客户端生成所述自定义协议请求时,所述自定义字段为第一自定义字段;所述在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为自定义协议请求,包括:
在所述第一自定义字段添加第一自定义信息,将所述初始thrift协议中添加所述第一自定义信息后生成的请求,确定为所述客户端发送至服务器端的自定义协议请求。
可选地,当在服务器端生成所述自定义协议请求时,所述自定义字段为第二自定义字段;所述在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为自定义协议请求,包括:
在所述第二自定义字段添加第二自定义信息,将所述初始thrift协议中添加所述第二自定义信息后生成的请求,确定为所述服务器端发送至客户端的自定义协议请求。
在本发明实施例的第二方面,公开了一种协议读取方法,包括:
第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,其中,所述第一协议为初始thrift 协议或自定义协议,所述第二协议为初始thrift协议或自定义协议,所述第二协议请求为通过所述第二协议生成的请求;
若能够被所述第一协议识别,读取所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
若不能被所述第一协议识别,指针跳过所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数。
可选地,当所述第一协议为自定义协议、所述第二协议请求为自定义协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述自定义协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为能够被所述自定义协议识别的自定义信息;
所述读取所述目标参数,包括:
读取所述自定义协议识别的所述自定义信息。
可选地,当所述第一协议为初始thrift协议、所述第二协议请求为自定义协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述初始thrift协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为不能被所述初始thrift协议识别的自定义信息;
所述指针跳过所述目标参数,包括:
所述指针跳过所述自定义协议请求的所述自定义信息。
可选地,当所述第一协议为自定义协议、所述第二协议请求为初始thrift 协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述自定义协议读取所述初始thrift协议请求的消息头后,判断所述初始thrift协议请求消息头后相邻的目标参数是否为能够被所述自定义协议识别的所述初始thrift协议请求的参数;
所述读取所述目标参数,包括:
读取所述初始thrift协议请求消息头后相邻的位置的参数;
缓存所述参数,所述指针再次指向所述位置,并直接获取所述位置的参数。
在本发明实施例的第三方面,公开了一种扩展thrift协议装置,包括:
字段增加模块,用于在初始thrift协议的消息头与参数之间,增加自定义字段;
请求生成模块,用于在所述自定义字段添加自定义信息,将所述初始thrift 协议中添加所述自定义信息后生成的请求,确定为自定义协议请求。
可选地,当在客户端生成所述自定义协议请求时,所述自定义字段为第一自定义字段;所述请求生成模块,具体用于在所述第一自定义字段添加第一自定义信息,将所述初始thrift协议中添加所述第一自定义信息后生成的请求,确定为所述客户端发送至服务器端的自定义协议请求。
可选地,当在服务器端生成所述自定义协议请求时,所述自定义字段为第二自定义字段;所述请求生成模块,具体用于在所述第二自定义字段添加第二自定义信息,将所述初始thrift协议中添加所述第二自定义信息后生成的请求,确定为所述服务器端发送至客户端的自定义协议请求。
在本发明实施例的第四方面,公开了一种协议读取装置,包括:
判断模块,用于第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,其中,所述第一协议为初始thrift协议或自定义协议,所述第二协议为初始thrift协议或自定义协议,所述第二协议请求为通过所述第二协议生成的请求;
第一读取模块,用于若能够被所述第一协议识别,读取所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
第二读取模块,用于若不能被所述第一协议识别,指针跳过所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数。
可选地,当所述第一协议为自定义协议、所述第二协议请求为自定义协议请求时,所述判断模块,具体用于所述自定义协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为能够被所述自定义协议识别的自定义信息;
所述第一读取模块,具体用于读取所述自定义协议识别的所述自定义信息。
可选地,当所述第一协议为初始thrift协议、所述第二协议请求为自定义协议请求时,所述判断模块,具体用于所述初始thrift协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为不能被所述初始thrift协议识别的自定义信息;
所述第二读取模块,具体用于所述指针跳过所述自定义协议请求的所述自定义信息。
可选地,当所述第一协议为自定义协议、所述第二协议请求为初始thrift 协议请求时,所述判断模块,具体用于所述自定义协议读取所述初始thrift协议请求的消息头后,判断所述初始thrift协议请求消息头后相邻的目标参数是否为能够被所述自定义协议识别的所述初始thrift协议请求的参数;
所述第一读取模块,具体用于读取所述初始thrift协议请求消息头后相邻的位置的参数;缓存所述参数,所述指针再次指向所述位置,并直接获取所述位置的参数。
在本发明实施例的又一方面,公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现上述第一方面任一所述的方法步骤。
在本发明实施例的又一方面,公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现上述第二方面任一所述的方法步骤。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行时,实现上述第一方面任一所述的方法步骤。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行时,实现上述第二方面任一所述的方法步骤。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面任一所述的方法步骤。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第二方面任一所述的方法步骤。
本发明实施例提供的一种扩展thrift协议方法、读取方法、装置以及电子设备,实现了在客户端或者服务端扩展任意一种thrift协议。具体为,通过在初始 thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议。实现了在客户端或者服务端扩展任意一种thrift协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
另外,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift协议的客户端以及服务端。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例的一种扩展thrift协议的方法流程图;
图2为本发明实施例的一种扩展thrift协议的方法中客户端对应的第一自定义协议结构示意图;
图3为本发明实施例的一种扩展thrift协议的方法中服务器端对应的第二自定义协议结构示意图;
图4为本发明实施例公开的一种协议读取方法流程图;
图5为本发明实施例的一种扩展thrift协议装置结构示意图;
图6为本发明实施例的一种协议读取装置结构示意图;
图7为本发明实施例的一种电子设备结构示意图;
图8为本发明实施例的另一种电子设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
Thrift协议是一种广泛应用在RPC服务上的高度压缩的二进制协议。然而,正是由于其高度压缩的二进制特性,导致它的扩展性很差。服务端和客户端很难在完成基本的RPC服务的同时,发送自定义的扩展信息。在提倡微服务的今天,RPC服务除了基本的通信,往往还需要增加各种高级功能,如调用链分析,性能指标监控等等。而这些高级功能的实现,都依赖于上下游服务能够互相发送自定义的数据。
针对上述提到的问题,本发明实施例提供了一种扩展thrift协议方法、读取方法、装置以及电子设备,以提供一种扩展的thrift协议,使其在完成基本的RPC调用功能的同时,可以互相发送自定义的数据信息。同时,该扩展后形成的自定义协议新协议可以与未扩展的初始thrift协议的服务端和客户端兼容,保证未升级的初始thrift协议的数据正常读取,以及保证形成的自定义协议能够读取初始thrift协议的数据以及自定义数据信息。具体是实施方式如下:
为实现上述发明目的,在本发明实施例的第一方面,公开了一种扩展thrift 协议方法,如图1所示。图1为本发明实施例的一种扩展thrift协议的方法流程图,包括:
S101,在初始thrift协议的消息头与参数之间,增加自定义字段。
本发明实施例为了能够实现Thrift协议的各种高级功能,如调用链分析,性能指标监控等,需要在初始thrift协议中添加自定义信息,进而将自定义信息与原数据信息结合形成新的自定义协议,通过该自定义协议实现更多高级功能。该初始thrift协议可为TCompactProtocol、TBinaryProtocol等thrift协议中的任一一种协议。
在本步骤中,为了将初始thrift协议扩展形成自定义协议,首先需要定位该初始thrift协议中添加自定义数据的位置,并且在该位置内添加的数据不影响原协议中数据的完整性与正确性,且该位置添加的自定义信息能够被快速识别和读取。本发明实施例可将该位置定位在初始thrift协议的消息头与参数之间。
具体地,可在服务器端或者客户端当前对应的初始thrift协议中,通过检测程序检测所要扩展的初始thrift协议的消息头与参数之间的位置。例如,检测TCompactProtocol的消息头部分与第一个参数之间的位置,在该位置处增加一个字段,即为本发明实施例的自定义字段。
S102,在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求。
上述确定了所要扩展的初始thrift协议中增加的自定义字段的位置后,在本步骤中,可在该位置处添加想要被识别、单独或者可与初始thrift协议中原参数结合起来,完成所要实现的高级功能对应的自定义信息。
在本发明实施例中,可提前在代码中设置该自定义信息,通过程序调用以及位置关联的方式,将该自定义信息添加到该自定义字段中。在添加完成后,按照消息头、自定义字段、原始参数部分的顺序组合成自定义协议,并可通过该协议生成所要完成的高级功能请求,形成本发明实施例的自定义协议请求。
上述在服务器端或者客户端形成自定义协议以及自定义协议请求后,可在服务器端或者客户端通过该自定义协议发送该自定义协议请求。在对应的接收端使用上述扩展方式,扩展初始thrift协议形成自定义协议,进而在接收端可接受该自定义协议请求,并处理该自定义协议请求。
本发明实施例提供的一种扩展thrift协议方法,通过在初始thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议,实现了在客户端或者服务端扩展任意一种thrift 协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
可选地,在本发明实施例的扩展thrift协议方法的一种实施例中,当在客户端生成自定义协议请求时,自定义字段为第一自定义字段;在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求,包括:
在第一自定义字段添加第一自定义信息,将初始thrift协议中添加第一自定义信息后生成的请求,确定为客户端发送至服务器端的自定义协议请求。
在本发明实施例中,当在客户端生成自定义协议请求时,客户端初始thrift 协议的第一个参数对应的字段Field ID为1。则检测程序检测到Field ID为1 的字段后,在该字段前增加一个字段,即为客户端初始thrift协议的消息头与参数之间对应形成的第一自定义字段,并将该第一自定义字段的Field ID设为 0。
上述确定了客户端初始thrift协议的第一自定义字段的Field ID为0后,可在该Field ID为0的第一自定义字段中添加客户端发送至服务器端的第一自定义信息。在添加完成后,按照消息头、第一自定义信息字段、原始参数部分的顺序组合,形成如图2的一种扩展thrift协议的方法中客户端对应的第一自定义协议结构示意图。
图2表示,客户端初始thrift协议包括消息头以及参数部分,其中消息头后的第一个参数可表示为参数1。客户端初始thrift协议对应的Field ID中,参数1的Field ID为Field ID 1,依次类推,可知每个参数对应的Field ID n。在本发明实施例中,在消息头与第一个参数对应为参数1直接确定添加第一自定义字段Field ID 0,进而在该消息头后Field ID为0的字段添加第一自定义信息。添加完成后,按照消息头、第一自定义信息字段、原始参数部分的顺序组合,形成客户端对应的第一自定义协议结构。
将通过该第一自定义协议发送该第一自定义信息生成的请求,确定为客户端发送至服务器端的自定义协议请求。
可见,通过本发明实施例,可实现升级客户端的初始thrift协议为自定义协议,进而通过该自定义协议发送自定义请求到服务器,实现了扩展后的协议正常的通信功能。
可选地,在本发明实施例的扩展thrift协议方法的一种实施例中,当在服务器端生成自定义协议请求时,自定义字段为第二自定义字段;在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求,包括:
在第二自定义字段添加第二自定义信息,将初始thrift协议中添加第二自定义信息后生成的请求,确定为服务器端发送至客户端的自定义协议请求。
在本发明实施例中,当在服务器端生成自定义协议请求时,服务器端初始 thrift协议的第一个参数对应的字段Field ID为0。则检测程序检测到Field ID 为0的字段后,在该字段前增加一个字段,即为服务器端初始thrift协议的消息头与参数之间对应形成的第二自定义字段,并将该第二自定义字段的Field ID设为-1。
上述确定了服务器端初始thrift协议的第二自定义字段的Field ID为-1后,可在该Field ID为-1的第二自定义字段中添加服务器端发送至客户端的第二自定义信息。在添加完成后,按照消息头、第二自定义信息字段、原始参数部分的顺序组合,形成如图3的一种扩展thrift协议的方法中服务器端对应的第二自定义协议结构示意图。
图3表示,服务器端初始thrift协议包括消息头以及参数部分,其中消息头后的第一个参数可表示为参数1。服务器端初始thrift协议对应的Field ID中,参数1的Field ID为Field ID 0,依次类推,可知每个参数对应的Field ID n。在本发明实施例中,在消息头与第一个参数对应为参数1之间确定添加第二自定义字段Field ID-1,进而在该消息头后Field ID为-1的字段添加第二自定义信息。添加完成后,按照消息头、第二自定义信息字段、原始参数部分的顺序组合,形成服务器端对应的第二自定义协议结构。
将通过该第二自定义协议发送该第二自定义信息生成的请求,确定为服务器端发送至客户端的自定义协议请求。
可见,通过本发明实施例,可实现升级服务器端的初始thrift协议为自定义协议,进而通过该自定义协议发送自定义请求到客户端,实现了扩展后的协议正常的通信功能。
本发明上述实施例实现了扩展服务器端以及客户端的初始thrift协议,如何保证在对应的接收端读取到信息,则可由如下实施例说明。
为了实现在对应接收端读取信息,在本发明实施例的第二方面,公开了一种协议读取方法,如图4所示。图4为本发明实施例公开的一种协议读取方法流程图,包括:
S401,第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,其中,第一协议为初始thrift协议或自定义协议,第二协议为初始thrift协议或自定义协议,第二协议请求为通过第二协议生成的请求。若能够识别,执行步骤S402;若不能识别,执行步骤S403。
在本发明实施例中公开了如何读取请求中协议的内容,包括自定义协议读取自定义协议请求、未扩展的初始thrift协议读取自定义协议请求、自定义协议读取未扩展的初始thrift协议请求以及初始thrift协议读取初始thrift协议请求对应的四种读取情况。则第一协议对应为初始thrift协议或自定义协议,第二协议对应为初始thrift协议或自定义协议。
在本发明实施例中要兼容服务器端以及客户端未升级的初始thrift协议,如何保证上述四种情况在读取信息时不影响初始thrift协议中参数的获取,保证正确的获得所要读取的协议请求中携带的信息是至关重要的。因此,在读取请求时,需要判断当前读取的请求时那种协议对应的请求。
在本步骤中,在对应的接收端使用第一协议接收到发送端发送的第二协议请求后,可用检测程序检测该第二协议请求是否能够被第一协议识别,并读取该第二协议请求中所有的内容,该第二协议请求为自定义协议请求或者初始 thrift协议中的一种。自定义协议与初始thrift协议的区别是消息头后有无添加的自定义字段,则在本步骤中需要判断消息头后的位置处的信息能否被当前第一协议识别。
识别的原则是自定义协议可识别自定义协议请求中自定义字段的信息,以及剩余字段对应的初始thrift协议的参数信息;自定义协议可识别初始thrift协议请求所有字段的信息;初始thrift协议可识别初始thrift协议请求所有字段的信息;初始thrift协议不可识别自定义协议请求中自定义字段的信息,只能识别剩余字段对应的初始thrift协议的参数信息。
按时上述识别原则,设置检测程序,检测第二协议请求消息头后相邻的目标参数对应为自定义信息还是初始thrift协议的参数信息,进而可判断第二协议请求消息头后相邻的目标参数能否被第一协议识别。
S402,读取目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
在上述判断过程中,若第二协议请求消息头后相邻的目标参数能被第一协议识别,说明该第一协议能读取该第二协议请求消息头后相邻的目标参数。则该第一协议可对应为自定义协议,第二协议请求可对应为自定义协议请求;或者第一协议可对应为自定义协议,第二协议请求可对应为初始thrift协议请求;或者第一协议可对应为初始thrift协议,第二协议请求可对应为初始thrift协议请求。
在上述判断结果为能够被第一协议识别后,可直接读取该目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取该目标参数之后的参数,直至读取到整个第二协议请求中的参数。进而可通过该第二协议请求内容判断当前所请求处理的任务。
S403,指针跳过目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
在上述判断过程中,若第二协议请求消息头后相邻的目标参数不能被第一协议识别,说明该第一协议不能读取该第二协议请求消息头后相邻的目标参数。则该第一协议可对应为初始thrift协议,第二协议请求可对应为自定义协议请求。则指针跳过该目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取该目标参数之后的参数,进而保证了该自定义协议请求中除自定义信息外对应的初始thrift协议参数能够正常读取。
本发明实施例提供的一种读取方法中,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift协议的客户端以及服务端。
可选地,在本发明实施例的读取方法的一种实施例中,当第一协议为自定义协议、第二协议请求为自定义协议请求时,第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,包括:
步骤一,自定义协议读取自定义协议请求的消息头后,判断自定义协议请求消息头后相邻的目标参数是否为能够被自定义协议识别的自定义信息。
在本步骤中,自定义协议读取第二协议请求时,先读取该第二协议请求的消息头,在通过检测程序检测该第二协议请求消息头后相邻的目标参数是否为自定义信息,进而可确定该第二协议请求是否为自定义协议请求。
具体地,当自定义协议在服务器端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后相邻位置Field ID的数值。若Field ID的数值为0,则说明该位置为客户端发送至服务器端的Field ID为0的第一自定义字段,进而判断该Field ID为0的第一自定义字段内的参数为能够被自定义协议识别的第一自定义信息。
当自定义协议在客户端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后的相邻位置Field ID的数值。若Field ID的数值为-1,则说明该位置为服务端发送至客户端端的Field ID为-1的第二自定义字段,进而判断该 Field ID为-1的第二自定义字段内的参数为能够被自定义协议识别的第二自定义信息。
读取目标参数,包括:
步骤二,读取自定义协议识别的自定义信息。
上述自定义协议判断该第二协议请求为自定义协议请求,并判断自定义协议请求消息头后相邻的目标参数为能够被自定义协议识别的自定义信息后,读取该自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取该自定义信息之后的参数。进而可读取该自定义协议请求所请求的内容,完成该自定义协议请求对应的功能。
具体地,当自定义协议在服务器端判断第二协议请求消息头后相邻的目标参数,为Field ID为0的第一自定义字段添加的第一自定义信息后,读取该第一自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取该第一自定义信息之后的参数。
当自定义协议在客户端判断判断第二协议请求消息头后相邻的目标参数,为Field ID为-1的第二自定义字段添加的第二自定义信息后,读取该第二自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取第二自定义信息之后的参数。
可见,通过本发明实施例,可实现升级客户端与服务器端的初始thrift协议为自定义协议,进而实现自定义协议在接收端读取自定义协议请求,获得自定义信息,实现了原始客户端与服务器端的平滑升级,以及实现了自定义协议的稳定通信。
可选地,在本发明实施例的读取方法的一种实施例中,当第一协议为初始 thrift协议、第二协议请求为自定义协议请求时,第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,包括:
步骤一,初始thrift协议读取自定义协议请求的消息头后,判断自定义协议请求消息头后相邻的目标参数是否为不能被初始thrift协议识别的自定义信息;
在本步骤中,初始thrift协议读取第二协议请求时,先读取该第二协议请求的消息头,在通过检测程序检测该第二协议请求消息头后相邻的目标参数是否能够识别,若不能识别,则说明该第二协议请求为自定义协议请求,该目标参数为自定义信息。
具体地,当初始thrift协议在服务器端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后相邻位置Field ID的数值。若Field ID的数值为0,则说明该位置为客户端发送至服务器端的Field ID为0的第一自定义字段,进而得知该Field ID为0的第一自定义字段内的参数为不能够被初始thrift协议识别的第一自定义信息。
若Field ID的数值为1,则说明该第二协议请求为初始thrift协议请求,该目标参数为能够被初始thrift协议识别的初始thrift协议请求的参数。
当自定义协议在客户端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后相邻位置Field ID的数值。若Field ID的数值为-1,则说明该位置为服务器端发送至客户端的Field ID为-1的第二自定义字段,进而得知该Field ID为-1的第一自定义字段内的参数为不能够被初始thrift协议识别的第二自定义信息。
若Field ID的数值为0,则说明该第二协议请求为初始thrift协议请求,该目标参数为能够被初始thrift协议识别的初始thrift协议请求的参数。
指针跳过目标参数,包括:
步骤二,指针跳过自定义协议请求的自定义信息。
当上述判断第二协议请求为自定义协议请求,该目标参数为自定义协议请求中的自定义信息后,指针跳过该自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取该自定义信息之后的参数。
具体地,当初始thrift协议在服务器端判断第二协议请求消息头后相邻的目标参数,为Field ID为0的第一自定义字段添加的第一自定义信息后,指针跳过该第一自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取该第一自定义信息之后的参数。
当初始thrift协议在服务器端判断第二协议请求消息头后相邻的目标参数,为Field ID为1的初始thrift协议请求的参数后,读取该目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取该目标参数之后的参数。
当初始thrift协议在客户端判断判断第二协议请求消息头后相邻的目标参数,为Field ID为-1的第二自定义字段添加的第二自定义信息后,指针跳过该第二自定义信息,并按照指针每次向右偏移一位的读取方式,顺序读取第二自定义信息之后的参数。
当初始thrift协议在客户端判断判断第二协议请求消息头后相邻的目标参数,为Field ID为0的初始thrift协议请求的参数后,读取该目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取该目标参数之后的参数。
可见,通过本发明实施例,未升级的原始客户端或服务器端的初始thrift 协议在读取自定义协议请求时,跳过不识别的自定义信息,获取初始thrift协议可识别的信息,保证了初始thrift协议的正常功能。
可选地,在本发明实施例的读取方法的一种实施例中,当第一协议为自定义协议、第二协议请求为初始thrift协议请求时,第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,包括:
步骤一,自定义协议读取初始thrift协议请求的消息头后,判断初始thrift 协议请求消息头后相邻的目标参数是否为能够被自定义协议识别的初始thrift 协议请求的参数。
在本步骤中,自定义协议读取第二协议请求时,先读取该第二协议请求的消息头,在通过检测程序检测该第二协议请求消息头后相邻的目标参数是否为自定义信息,进而可确定该第二协议请求是否为自定义协议请求。
具体地,当自定义协议在服务器端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后相邻位置Field ID的数值。若Field ID的数值为1,则说明该位置为客户端发送至服务器端的Field ID为1的初始thrift协议请求的参数,进而判断该目标参数为能够被自定义协议识别的初始thrift协议请求的参数。
当自定义协议在客户端读取第二协议请求时,通过检测程序检测该第二协议请求消息头后的相邻位置Field ID的数值。若Field ID的数值为0,则说明该位置为服务端发送至客户端的Field ID为0的初始thrift协议请求的参数,进而判断该目标参数为能够被自定义协议识别的初始thrift协议请求的参数。
读取目标参数,包括:
步骤二,读取初始thrift协议请求消息头后相邻的位置的参数。
上述判断第二协议请求为自定义协议能够识别的初始thrift协议请求,以及判断目标参数为能够被自定义协议识别的初始thrift协议请求的参数后,读取该。初始thrift协议请求消息头后相邻的位置的参数。
具体地,当自定义协议在服务器端读取第二协议请求时,判断第二协议请求为初始thrift协议请求,判断目标参数为能够被自定义协议识别的客户端发送至服务器端的Field ID为1的初始thrift协议请求的参数,则读取该Field ID为1的初始thrift协议请求的参数。
当自定义协议在客户端读取第二协议请求时,判断第二协议请求为初始 thrift协议请求,判断目标参数为能够被自定义协议识别的客户端发送至服务器端的Field ID为0的初始thrift协议请求的参数,则读取该Field ID为0的初始thrift 协议请求的参数。
步骤三,缓存参数,指针再次指向位置,并直接获取位置的参数。
具体地,当自定义协议在服务器端读取第二协议请求时,当上述读取完该 FieldID为1的初始thrift协议请求的参数后,缓存Field ID为1的初始thrift协议请求的参数。指针再次指向该位置,并直接获取该位置的参数。并按照指针每次向右偏移一位的读取方式,顺序读取该位置之后的参数。
当自定义协议在客户端读取第二协议请求时,当上述读取完该Field ID为0 的初始thrift协议请求的参数后,缓存Field ID为0的初始thrift协议请求的参数。指针再次指向该位置,并直接获取该位置的参数。并按照指针每次向右偏移一位的读取方式,顺序读取该位置之后的参数。
可见,通过本发明实施例,可实现兼容未升级的原始客户端或服务器端的初始thrift协议与自定义协议,进而实现自定义协议可读取初始thrift协议的内容,保证了自定义协议与初始thrift协议之间正常的通信。
为了更好的说明本发明实施例的扩展thrift协议方法以实现自定义的高级功能,可有如下所示的实施方法。以下可以TCompactProtocol为例进行方法说明。
步骤一,在所要扩展的初始thrift协议对应的TCompactProtocol中,在头消息与参数之间增加自定义字段,在客户端增加的自定义字段Field ID为0;在服务器端增加的自定义字段Field ID为-1;
步骤二,在增加的自定义字段添加自定义信息,自定义数据格式可为 (Map<String,String>),将在TCompactProtocol中添加自定义信息后生成的协议确定为自定义协议TAttachableProtocol,将通过该自定义协议 TAttachableProtocol发送的请求定义为自定义请求,并发送至对应的接收端。
步骤三,在接收端使用该自定义协议TAttachableProtocol读取自定义请求中的自定义数据(Map<String,String>,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
步骤四,在接收端读取到该自定义数据(Map<String,String>后,可以自定义处理器(processor),用于处理自己的逻辑,从而得到扩展初始thrift协议实现高级功能,例如实现服务间的调用链分析功能。调用链分析主要是在客户端和服务端将客户端发送、服务端接收(sr)、服务端发送、客户端接收(cr)这几个关键时间节点记录下来,并通过唯一trace_ID和parent_ID等关联起来,要发送这些ID数据,就需要RPC框架能够支持发送自定义数据。
具体实现调用链分析功能的方式如下
a)客户端利用zipkin框架的brave API(Application Programming Interface,应用程序编程接口),生成调用链分析所需的TRACE_ID、SPAN_ID、 PARENT_SPAN_ID、SAMPLED等参数,通过上述自定义协议 TAttachableProtocol将这些数据添加在自定义字段,作为自定义数据,并发送至对应的服务器端;
b)服务器端使用自定义协议TAttachableProtocol读取上述自定义数据,获得调用链分析相关数据后,同样调用brave API做调用链分析的各种处理,生成自己的调用链分析数据(trace data);
c)客户端和服务端都会异步地将自己的trace data发送到zipkin服务器,供调用链分析使用。
在本发明实施例的第三方面,公开了一种扩展thrift协议装置,如图5所示。图5为本发明实施例的一种扩展thrift协议装置结构示意图,包括:
字段增加模块501,用于在初始thrift协议的消息头与参数之间,增加自定义字段;
请求生成模块502,用于在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求。
本发明实施例提供的一种扩展thrift协议装置,通过在初始thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议,实现了在客户端或者服务端扩展任意一种thrift 协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
可选地,在本发明实施例的扩展thrift协议装置的一种实施例中,当在客户端生成自定义协议请求时,自定义字段为第一自定义字段;请求生成模块502,具体用于在第一自定义字段添加第一自定义信息,将初始thrift协议中添加第一自定义信息后生成的请求,确定为客户端发送至服务器端的自定义协议请求。
可选地,在本发明实施例的扩展thrift协议装置的一种实施例中,当在服务器端生成自定义协议请求时,自定义字段为第二自定义字段;请求生成模块 502,具体用于在第二自定义字段添加第二自定义信息,将初始thrift协议中添加第二自定义信息后生成的请求,确定为服务器端发送至客户端的自定义协议请求。
在本发明实施例的第四方面,公开了一种协议读取装置,如图6所示。图6 为本发明实施例的一种协议读取装置结构示意图,包括:
判断模块601,用于第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,其中,第一协议为初始 thrift协议或自定义协议,第二协议为初始thrift协议或自定义协议,第二协议请求为通过第二协议生成的请求;
第一读取模块602,用于若能够被第一协议识别,读取目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数;
第二读取模块603,用于若不能被第一协议识别,指针跳过目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
本发明实施例提供的一种读取装置中,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift协议的客户端以及服务端。
可选地,在本发明实施例的读取装置的一种实施例中,当第一协议为自定义协议、第二协议请求为自定义协议请求时,判断模块601,具体用于自定义协议读取自定义协议请求的消息头后,判断自定义协议请求消息头后相邻的目标参数是否为能够被自定义协议识别的自定义信息;
第一读取模块602,具体用于读取自定义协议识别的自定义信息。
可选地,在本发明实施例的读取装置的一种实施例中,当第一协议为初始 thrift协议、第二协议请求为自定义协议请求时,判断模块601,具体用于初始 thrift协议读取自定义协议请求的消息头后,判断自定义协议请求消息头后相邻的目标参数是否为不能被初始thrift协议识别的自定义信息;
第二读取模块603,具体用于指针跳过自定义协议请求的自定义信息。
可选地,在本发明实施例的读取装置的一种实施例中,当第一协议为自定义协议、第二协议请求为初始thrift协议请求时,判断模块601,具体用于自定义协议读取初始thrift协议请求的消息头后,判断初始thrift协议请求消息头后相邻的目标参数是否为能够被自定义协议识别的初始thrift协议请求的参数;
第一读取模块601,具体用于读取初始thrift协议请求消息头后相邻的位置的参数;缓存参数,指针再次指向位置,并直接获取位置的参数。
在本发明实施例的又一方面,公开了一种电子设备,如图7所示。图7为本发明实施例的一种电子设备结构示意图,包括处理器701、通信接口702、存储器703和通信总线704,其中,处理器701、通信接口702、存储器703通过通信总线704完成相互间的通信;
存储器703,用于存放计算机程序;
处理器701,用于执行存储器703上所存放的程序时,实现第一方面扩展 thrift协议方法的步骤:
在初始thrift协议的消息头与参数之间,增加自定义字段;
在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求。
上述电子设备提到的通信总线704可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线704可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口702用于上述电子设备与其他设备之间的通信。
存储器703可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器703还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器701可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array, FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本发明实施例提供的一种电子设备,实现了在客户端或者服务端扩展任意一种thrift协议。具体为,通过在初始thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议。实现了在客户端或者服务端扩展任意一种thrift协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
在本发明实施例的又一方面,公开了另一种电子设备,如图8所示。图8为本发明实施例的一种电子设备结构示意图,包括处理器801、通信接口802、存储器803和通信总线804,其中,处理器801、通信接口802、存储器803通过通信总线804完成相互间的通信;
存储器803,用于存放计算机程序;
处理器801,用于执行存储器803上所存放的程序时,实现第二方面协议读取方法的步骤:
第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,其中,第一协议为初始thrift协议或自定义协议,第二协议为初始thrift协议或自定义协议,第二协议请求为通过第二协议生成的请求;
若能够被第一协议识别,读取目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数;
若不能被第一协议识别,指针跳过目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
上述电子设备提到的通信总线804可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线804可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口802用于上述电子设备与其他设备之间的通信。
存储器803可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器803还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器801可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array, FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明实施例提供的另一种电子设备中,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift协议的客户端以及服务端。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,实现第一方面扩展 thrift协议方法的步骤:
在初始thrift协议的消息头与参数之间,增加自定义字段;
在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求。
本发明实施例提供的一种计算机可读存储介质,实现了在客户端或者服务端扩展任意一种thrift协议。具体为,通过在初始thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议。实现了在客户端或者服务端扩展任意一种thrift协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,实现第二方面协议读取方法的步骤:
第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,其中,第一协议为初始thrift协议或自定义协议,第二协议为初始thrift协议或自定义协议,第二协议请求为通过第二协议生成的请求;
若能够被第一协议识别,读取目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数;
若不能被第一协议识别,指针跳过目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
本发明实施例提供的一种计算机可读存储介质,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift协议的客户端以及服务端。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,实现第一方面扩展thrift协议方法的步骤:
在初始thrift协议的消息头与参数之间,增加自定义字段;
在自定义字段添加自定义信息,将初始thrift协议中添加自定义信息后生成的请求,确定为自定义协议请求。
本发明实施例提供的一种包含指令的计算机程序产品,实现了在客户端或者服务端扩展任意一种thrift协议。具体为,通过在初始thrift协议的消息头位置与参数部分的第一参数位置之间增加自定义字段,进而在该字段添加自定义信息,形成自定义协议。实现了在客户端或者服务端扩展任意一种thrift协议。通过升级对应接收端为自定义协议后即可接收自定义请求,进而可通过该自定义请求完成各种对应的高级功能。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,实现第二方面协议读取方法的步骤:
第一协议读取第二协议请求的消息头后,判断第二协议请求消息头后相邻的目标参数能否被第一协议识别,其中,第一协议为初始thrift协议或自定义协议,第二协议为初始thrift协议或自定义协议,第二协议请求为通过第二协议生成的请求;
若能够被第一协议识别,读取目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数;
若不能被第一协议识别,指针跳过目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取目标参数之后的参数。
本发明实施例提供的一种包含指令的计算机程序产品,当客户端以及服务端还未升级成为自定义协议时,按照客户端以及服务端本身所对应的thrift协议的逻辑规则,接收或者发送自定义协议请求,并忽略该自定义协议请求中的自定义信息,正常读取自定义协议请求中对应的初始thrift协议本身的参数,避免了添加自定义信息后对请求中本身携带信息的读取错误,实现了兼容初始thrift 协议的客户端以及服务端。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备以及存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (11)
1.一种协议读取方法,其特征在于,包括:
第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,其中,所述第一协议为初始thrift协议或自定义协议,所述第二协议为初始thrift协议或自定义协议,所述第二协议请求为通过所述第二协议生成的请求;
若能够被所述第一协议识别,读取所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
若不能被所述第一协议识别,指针跳过所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
当所述第一协议为自定义协议、所述第二协议请求为自定义协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述自定义协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为能够被所述自定义协议识别的自定义信息;
所述读取所述目标参数,包括:
读取所述自定义协议识别的所述自定义信息;
当所述第一协议为自定义协议、所述第二协议请求为初始thrift协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述自定义协议读取所述初始thrift协议请求的消息头后,判断所述初始thrift协议请求消息头后相邻的目标参数是否为能够被所述自定义协议识别的所述初始thrift协议请求的参数;
所述读取所述目标参数,包括:
读取所述初始thrift协议请求消息头后相邻的位置的参数;
缓存所述参数,所述指针再次指向所述位置,并直接获取所述位置的参数。
2.根据权利要求1所述的方法,其特征在于,当所述第一协议为初始thrift协议、所述第二协议请求为自定义协议请求时,所述第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,包括:
所述初始thrift协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为不能被所述初始thrift协议识别的自定义信息;
所述指针跳过所述目标参数,包括:
所述指针跳过所述自定义协议请求的所述自定义信息。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述初始thrift协议的消息头与参数之间,增加自定义字段;
在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为所述自定义协议请求。
4.根据权利要求3所述的方法,其特征在于,当在客户端生成所述自定义协议请求时,所述自定义字段为第一自定义字段;所述在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为所述自定义协议请求,包括:
在所述第一自定义字段添加第一自定义信息,将所述初始thrift协议中添加所述第一自定义信息后生成的请求,确定为所述客户端发送至服务器端的自定义协议请求。
5.根据权利要求3所述的方法,其特征在于,当在服务器端生成所述自定义协议请求时,所述自定义字段为第二自定义字段;所述在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为所述自定义协议请求,包括:
在所述第二自定义字段添加第二自定义信息,将所述初始thrift协议中添加所述第二自定义信息后生成的请求,确定为所述服务器端发送至客户端的自定义协议请求。
6.一种协议读取装置,其特征在于,包括:
判断模块,用于第一协议读取第二协议请求的消息头后,判断所述第二协议请求消息头后相邻的目标参数能否被所述第一协议识别,其中,所述第一协议为初始thrift协议或自定义协议,所述第二协议为初始thrift协议或自定义协议,所述第二协议请求为通过所述第二协议生成的请求;
第一读取模块,用于若能够被所述第一协议识别,读取所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
第二读取模块,用于若不能被所述第一协议识别,指针跳过所述目标参数,并按照指针每次向右偏移一位的读取方式,顺序读取所述目标参数之后的参数;
当所述第一协议为自定义协议、所述第二协议请求为自定义协议请求时,所述判断模块,具体用于所述自定义协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为能够被所述自定义协议识别的自定义信息;
所述第一读取模块,具体用于读取所述自定义协议识别的所述自定义信息;
当所述第一协议为自定义协议、所述第二协议请求为初始thrift协议请求时,所述判断模块,具体用于所述自定义协议读取所述初始thrift协议请求的消息头后,判断所述初始thrift协议请求消息头后相邻的目标参数是否为能够被所述自定义协议识别的所述初始thrift协议请求的参数;
所述第一读取模块,具体用于读取所述初始thrift协议请求消息头后相邻的位置的参数;缓存所述参数,所述指针再次指向所述位置,并直接获取所述位置的参数。
7.根据权利要求6所述的装置,其特征在于,当所述第一协议为初始thrift协议、所述第二协议请求为自定义协议请求时,所述判断模块,具体用于所述初始thrift协议读取所述自定义协议请求的消息头后,判断所述自定义协议请求消息头后相邻的所述目标参数是否为不能被所述初始thrift协议识别的自定义信息;
所述第二读取模块,具体用于所述指针跳过所述自定义协议请求的所述自定义信息。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
字段增加模块,用于在所述初始thrift协议的消息头与参数之间,增加自定义字段;
请求生成模块,用于在所述自定义字段添加自定义信息,将所述初始thrift协议中添加所述自定义信息后生成的请求,确定为所述自定义协议请求。
9.根据权利要求8所述的装置,其特征在于,当在客户端生成所述自定义协议请求时,所述自定义字段为第一自定义字段;所述请求生成模块,具体用于在所述第一自定义字段添加第一自定义信息,将所述初始thrift协议中添加所述第一自定义信息后生成的请求,确定为所述客户端发送至服务器端的自定义协议请求。
10.根据权利要求8所述的装置,其特征在于,当在服务器端生成所述自定义协议请求时,所述自定义字段为第二自定义字段;所述请求生成模块,具体用于在所述第二自定义字段添加第二自定义信息,将所述初始thrift协议中添加所述第二自定义信息后生成的请求,确定为所述服务器端发送至客户端的自定义协议请求。
11.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现权利要求1-5任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711078359.0A CN107800707B (zh) | 2017-11-06 | 2017-11-06 | 扩展thrift协议读取方法、读取装置以及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711078359.0A CN107800707B (zh) | 2017-11-06 | 2017-11-06 | 扩展thrift协议读取方法、读取装置以及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107800707A CN107800707A (zh) | 2018-03-13 |
CN107800707B true CN107800707B (zh) | 2020-07-03 |
Family
ID=61549044
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711078359.0A Active CN107800707B (zh) | 2017-11-06 | 2017-11-06 | 扩展thrift协议读取方法、读取装置以及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107800707B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105516097A (zh) * | 2015-11-30 | 2016-04-20 | 上海爱数信息技术股份有限公司 | 基于Thrift数据格式的混合架构消息系统及消息传输方法 |
CN107301098A (zh) * | 2017-06-15 | 2017-10-27 | 搜易贷(北京)金融信息服务有限公司 | 一种基于Thrift协议的远程过程调用装置、方法及系统 |
-
2017
- 2017-11-06 CN CN201711078359.0A patent/CN107800707B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105516097A (zh) * | 2015-11-30 | 2016-04-20 | 上海爱数信息技术股份有限公司 | 基于Thrift数据格式的混合架构消息系统及消息传输方法 |
CN107301098A (zh) * | 2017-06-15 | 2017-10-27 | 搜易贷(北京)金融信息服务有限公司 | 一种基于Thrift协议的远程过程调用装置、方法及系统 |
Non-Patent Citations (3)
Title |
---|
Thrift:可扩展的跨语言服务实现;mark slee等,翻译王浩;《ITEYE网站》;20101124;参见4、5节 * |
Thrift使用指南;未知;《董的博客》;20130414;参见第2.1、2.7、3.2、4节 * |
未知.Thrift使用指南.《董的博客》.2013,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN107800707A (zh) | 2018-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107315825B (zh) | 一种索引更新系统、方法及装置 | |
CN109391673B (zh) | 一种管理更新文件的方法、系统及终端设备 | |
CN106462430B (zh) | 应用升级包获取方法及装置 | |
CN110944220B (zh) | 视频投屏播放方法、装置、设备及系统 | |
CN110022259B (zh) | 消息到达率确定方法、装置、数据统计服务器及存储介质 | |
CN108874825B (zh) | 一种异常数据的校验方法和装置 | |
CN114090033A (zh) | Ota升级方法、装置、电子设备及可读介质 | |
CN111563199B (zh) | 一种数据处理方法及装置 | |
CN112468585B (zh) | 数据传输方法、装置、电子设备及存储介质 | |
CN107800707B (zh) | 扩展thrift协议读取方法、读取装置以及电子设备 | |
CN113360348B (zh) | 异常请求处理方法、装置、电子设备和存储介质 | |
CN112149392A (zh) | 一种富文本编辑方法和装置 | |
CN109739574A (zh) | 数据获取方法与电子设备、标定方法及装置 | |
CN112068899B (zh) | 插件加载方法、装置、电子设备及存储介质 | |
CN110221880B (zh) | 应用程序编程接口调用方法、装置、设备及介质 | |
CN106156235B (zh) | 一种基于Android平台的图片下载方法及系统 | |
CN110069731B (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN114374745A (zh) | 一种协议格式的处理方法及系统 | |
CN110896391B (zh) | 一种报文处理方法和装置 | |
CN114449052B (zh) | 一种数据压缩方法、装置、电子设备及存储介质 | |
CN108234216B (zh) | 下载数据报文的方法及装置 | |
CN110784479B (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN109086066B (zh) | 应用程序的更新方法、装置、计算机设备及存储介质 | |
CN108052648B (zh) | 一种网站图片删除方法、装置及电子设备 | |
CN112560093B (zh) | 基于区块链的档案管理方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |