CN109413137A - 一种基于avro的PHP请求Python的方法 - Google Patents
一种基于avro的PHP请求Python的方法 Download PDFInfo
- Publication number
- CN109413137A CN109413137A CN201811019743.8A CN201811019743A CN109413137A CN 109413137 A CN109413137 A CN 109413137A CN 201811019743 A CN201811019743 A CN 201811019743A CN 109413137 A CN109413137 A CN 109413137A
- Authority
- CN
- China
- Prior art keywords
- php
- python
- avro
- parameter
- data
- 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.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明涉及网络数据通信技术领域,具体涉及一种基于avro的PHP请求Python的方法,包括环境配置、PHP安装Avro官方扩展、Python安装Avro扩展、建立JSON模式文件、用Python的HTTPServer做一个http服务、对PHP参数进行avro/binary的方式编码。本发明采用Avro中的模式,用JSON文件定义数据接口,PHP发送和Python接收参数时都依据JSON的模式文件来处理和识别数据,保证了数据的一致性,对数据进行Avro二进制序列化,减少了数据耗费的资源,提高了传输速度,在PHP请求Python服务的方式上,采用Avro模式作为定义数据格式的定义方式,采用Python的HttpServer做Http服务,这样避免了Cli命令行方式导致程序卡死的问题,也不会导致php‑fpm阻塞从而引起程序崩溃的问题。
Description
技术领域
本发明涉及网络数据通信技术领域,具体涉及一种基于avro的PHP请求Python的方法。
背景技术
Avro是Hadoop项目之一。主要用来支持数据密集型应用,它定义了一种数据格式并在多种编程语言中支持这种格式。Avro依赖于模式(Schema)。Avro数据的读写操作是很频繁的,而这些操作都需要使用模式,这样就减少写入每个数据资料的开销,使得序列化快速而又轻巧。这种数据及其模式的自我描述方便于动态脚本语言的使用。Avro的Schama主要表示方法是JSON,这样对于已经拥有JSON库的语言可以容易实现,它会提供一些用来描述某种数据类型(TYPE)的特定的属性,Avro支持的数据类型有很多,包括基本的数据类型(Primitive Type)和复合数据类型(Complex Type),其中基本数据类型有八种,复合数据类型有六种,基本能够满足于丰富多样的应用场景。在解决PHP和Python通信方面业内已经有不少的尝试和案例,下面只简单介绍几种。在前端方面通过curl模拟发送请求与Python通信;也有人尝试利用socket通信来达到PHP和Python之间通信。更有相关的技术工程师通过cli命令行直接在PHP环境调用Python脚本来实现请求。此外,还有利用mysql或者缓存技术作为中间件让PHP和Python进行的数据异步处理。在数据序列化处理方面,各种技术更是层出不,比较常用的有JSON,XML,Protocol Buffers等,XML是可扩展标记语言,目前应用广泛,扩展丰富,独立于语言和开发平台,极大的方便了跨语言和平台开发的难度,比如在Python和PHP之间可以通过Webservice接口进行数据传输,Webservice的数据格式就是XML语言。JSON是一种轻量级的数据交换格式,他的设计思路和xml有相似的地方,即和语言无关,适用于不同语言,但区别于XML的是JSON设计的目标就是进行通信,在描述同样的数据结构方面相比于XML,JSON的容量更小并且PHP和Python都能够很好的处理json格式的数据。Protocol Buffers是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它也具有JSON的优点即跨语言和平台,并且具有极强的可扩展性,官方支持Python,但可以找到PHP的第三方语言扩展包。通过Protocol Buffers,也可以定义数据结构,并生成基于PHP和Python语言的代码。在PHP请求Python服务方面之前尝试过采用cli命令行的模式,在命令行直接调用Python脚本,比如PHP接收到一个url需要调用Python脚本进行处理,获取url标题,采用命令行直接调用的方法,效果不太理想,一方面,程序比较容易卡死,另一方面在请求比较频繁的时候会操作更加严重的问题,比如占用PHP端口,导致PHP-fpm无法启动。在异步处理方案中,需要一个中间服务,可能是mysql或者利用缓存服务器,php把数据缓存起来然后通过python调用数据处理,处理完之后在交给中间服务,这种方式,不但无法实现实时处理,而且耗费资源比较多。在数据序列化的技术方面,XML,JSON和Protocol Buffers都有各自的缺点,以ProtocolBuffers为例,它需要用户先定义数据结构,然后根据这个数据结构生成代码,再组装数据。如果需要操作多个数据源的数据集,那么需要定义多套数据结构并重复执行多次上面的流程,这样就不能对任意数据集做统一处理。其次,对于PHP和Python这样的脚本语言来说,使用代码生成是不合理的,并且Protocol Buffers在序列化时考虑到数据定义与数据可能不完全匹配,在数据中添加注解,这会让数据变得庞大并拖慢处理速度。
发明内容
本发明的目的在于克服现有技术中存在的问题,提供一种基于avro的PHP请求Python的方法,它可以实现在php的应用脚本中,调用python轻量级的处理脚本,利用python的优势部分来弥补php在处理字符串和文本内容等方面的劣势
为实现上述技术目的,达到上述技术效果,本发明是通过以下技术方案实现的:
一种基于avro的PHP请求Python的方法,包括如下步骤:
步骤1、环境配置:配置PHP5.6、Python3以上的环境配置;
步骤2、PHP安装Avro官方扩展;
步骤3、Python安装Avro扩展;
步骤4、建立JSON模式文件;
步骤5、用Python的HTTPServer做一个http服务;
步骤6、对PHP参数进行avro/binary的方式编码。
进一步地,所述步骤1、步骤2、步骤3中保证php和Python安装的Avro版本对应,Python如果通过pip安装需要先安装libsnappy扩展。
进一步地,所述步骤4具体包括如下步骤:
步骤4.1、创建一个定义数据类型的JSON格式文件;
步骤4.2、php和Python使用相同的模式文件。
进一步地,所述步骤5具体包括如下步骤:
步骤5.1、用Python的HTTPServer做一个http服务,用来响应PHP发送的请求,接受PHP传送的参数;
步骤5.2、对PHP参数进行解析,并提供要求的逻辑处理;
步骤5.3、之后返回给PHP处理结果。
进一步地,所述步骤6中具体包括如下步骤:
步骤6.1、PHP调用Avro扩展库的AvroIOBinaryEncoder函数对参数进行二进制编码;
步骤6.2、Python接收参数以后调用io.BinaryDecoder函数对参数以相同的解码方式解码;
步骤6.3、Python经过所述步骤6.2对参数解码以后,调用io.DatumReader(SCHEMA)函数,使用JSON Schame文件对参数进行模式解析,再调用datum_reader.read()对解码后的参数进行还原得到PHP传送过来的实际参数;
步骤6.4、Python对步骤6.3解析出来的参数进行相应的逻辑处理之后返回给PHP。
本发明的有益效果:在处理php请求Python服务时,为了保持数据一致性,采用Avro中的模式,用JSON文件定义数据接口,PHP发送和Python接收参数时都依据JSON的模式文件来处理和识别数据,这样就保证了数据的一致性,此外,为了提高传输效率,对数据进行Avro二进制序列化,减少了数据耗费的资源,提高了传输速度,在PHP请求Python服务的方式上,采用Avro模式作为定义数据格式的定义方式,采用Python的HttpServer做Http服务,这样避免了Cli命令行方式导致程序卡死的问题,也不会导致php-fpm阻塞从而引起程序崩溃的问题,另外传输数据以avro/binary的方式编码,序列化处理之后的数据方便存诸和传输,让数据被更具好的维护。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
一种基于avro的PHP请求Python的方法,包括如下步骤:
步骤1、环境配置:配置PHP5.6、Python3以上的环境配置;
步骤2、PHP安装Avro官方扩展;
步骤3、Python安装Avro扩展;
步骤4、建立JSON模式文件;
步骤5、用Python的HTTPServer做一个http服务;
步骤6、对PHP参数进行avro/binary的方式编码。
所述步骤1、步骤2、步骤3中保证php和Python安装的Avro版本对应,Python如果通过pip安装需要先安装libsnappy扩展。
所述步骤4具体包括如下步骤:
步骤4.1、创建一个定义数据类型的JSON格式文件;
步骤4.2、php和Python使用相同的模式文件。
所述步骤5具体包括如下步骤:
步骤5.1、用Python的HTTPServer做一个http服务,用来响应PHP发送的请求,接受PHP传送的参数;
步骤5.2、对PHP参数进行解析,并提供要求的逻辑处理;
步骤5.3、之后返回给PHP处理结果。
所述步骤6中具体包括如下步骤:
步骤6.1、PHP调用Avro扩展库的AvroIOBinaryEncoder函数对参数进行二进制编码;
步骤6.2、Python接收参数以后调用io.BinaryDecoder函数对参数以相同的解码方式解码;
步骤6.3、Python经过所述步骤6.2对参数解码以后,调用io.DatumReader(SCHEMA)函数,使用JSON Schame文件对参数进行模式解析,再调用datum_reader.read()对解码后的参数进行还原得到PHP传送过来的实际参数;
步骤6.4、Python对步骤6.3解析出来的参数进行相应的逻辑处理之后返回给PHP。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (5)
1.一种基于avro的PHP请求Python的方法,其特征在于,包括如下步骤:
步骤1、环境配置:配置PHP5.6、Python3以上的环境配置;
步骤2、PHP安装Avro官方扩展;
步骤3、Python安装Avro扩展;
步骤4、建立JSON模式文件;
步骤5、用Python的HTTPServer做一个http服务;
步骤6、对PHP参数进行avro/binary的方式编码。
2.根据权利要求1所述的一种基于avro的PHP请求Python的方法,其特征在于,所述步骤1、步骤2、步骤3中保证php和Python安装的Avro版本对应,Python如果通过pip安装需要先安装libsnappy扩展。
3.根据权利要求1所述的一种基于avro的PHP请求Python的方法,其特征在于,所述步骤4具体包括如下步骤:
步骤4.1、创建一个定义数据类型的JSON格式文件;
步骤4.2、php和Python使用相同的模式文件。
4.根据权利要求1所述的一种基于avro的PHP请求Python的方法,其特征在于,所述步骤5具体包括如下步骤:
步骤5.1、用Python的HTTPServer做一个http服务,用来响应PHP发送的请求,接受PHP传送的参数;
步骤5.2、对PHP参数进行解析,并提供要求的逻辑处理;
步骤5.3、之后返回给PHP处理结果。
5.根据权利要求1所述的一种基于avro的PHP请求Python的方法,其特征在于,所述步骤6中具体包括如下步骤:
步骤6.1、PHP调用Avro扩展库的AvroIOBinaryEncoder函数对参数进行二进制编码;
步骤6.2、Python接收参数以后调用io.BinaryDecoder函数对参数以相同的解码方式解码;
步骤6.3、Python经过所述步骤6.2对参数解码以后,调用io.DatumReader(SCHEMA)函数,使用JSON Schame文件对参数进行模式解析,再调用datum_reader.read()对解码后的参数进行还原得到PHP传送过来的实际参数;
步骤6.4、Python对步骤6.3解析出来的参数进行相应的逻辑处理之后返回给PHP。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811019743.8A CN109413137A (zh) | 2018-09-03 | 2018-09-03 | 一种基于avro的PHP请求Python的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811019743.8A CN109413137A (zh) | 2018-09-03 | 2018-09-03 | 一种基于avro的PHP请求Python的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109413137A true CN109413137A (zh) | 2019-03-01 |
Family
ID=65463792
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811019743.8A Pending CN109413137A (zh) | 2018-09-03 | 2018-09-03 | 一种基于avro的PHP请求Python的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109413137A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347051A (zh) * | 2020-11-03 | 2021-02-09 | 中国电建集团昆明勘测设计研究院有限公司 | 一种基于http服务的文件处理轻量化方法、装置、计算机设备和存储介质 |
-
2018
- 2018-09-03 CN CN201811019743.8A patent/CN109413137A/zh active Pending
Non-Patent Citations (2)
Title |
---|
PERCHOULI: ""基于avro的PHP请求Python的方法"", 《HTTPS://DMYZ.ORG/ARCHIVES/409》 * |
PHP中文网: ""Avro用php请求python服务的例子"", 《HTTPS://WWW.PHP.CN/MYSQL-TUTORIALS-132821.HTML》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112347051A (zh) * | 2020-11-03 | 2021-02-09 | 中国电建集团昆明勘测设计研究院有限公司 | 一种基于http服务的文件处理轻量化方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8763008B2 (en) | System and method for processing messages using native data serialization/deserialization in a service-oriented pipeline architecture | |
AU2007225421B2 (en) | Efficient encoding of alternative graphic sets | |
CN103179133B (zh) | 基于实体类的客户端与服务器通信的方法 | |
CN103516762A (zh) | 一种虚拟桌面的生成方法、设备及系统 | |
CN101848239B (zh) | 一种高时效性的分布式服务集成调用系统 | |
CN108848108A (zh) | 基于移动互联网+的创新项目pdca过程管理平台 | |
CN112289307A (zh) | 基于GRPC实现Kaldi语音识别服务的方法、系统及介质 | |
CN112035217A (zh) | 集群的处理方法、装置、电子设备及计算机可读存储介质 | |
CN114760369A (zh) | 一种协议元数据提取方法、装置、设备及存储介质 | |
CN109413137A (zh) | 一种基于avro的PHP请求Python的方法 | |
CN109067754B (zh) | 一种请求端与服务端的通信方法及系统 | |
CN107169100A (zh) | 一种电动汽车远程监控通信服务系统及方法 | |
CN107872441B (zh) | 生成设备属性配置文件的方法和装置 | |
US20050034099A1 (en) | Method of developing software programs for resource constrained mobile computing devices | |
CN115630614B (zh) | 数据传输方法、装置、电子设备与介质 | |
CN115604365B (zh) | 数据编解码方法、装置、电子设备及可读存储介质 | |
CN112905332A (zh) | 一种基于LVS负载均衡Django架构实现英文PDF在线快速翻译方法 | |
CN106293862A (zh) | 一种可扩展标记语言xml数据的解析方法和装置 | |
CN110855727A (zh) | 基于字节序列化和反序列化的数据对象的传输系统和方法 | |
CN110830427A (zh) | 一种netty环境下的消息编码、消息解码的方法和装置 | |
CN116561202A (zh) | 一种对象序列化处理的方法和装置 | |
CN108075989A (zh) | 一种基于可扩展协议的负载均衡网络中间件实现方法 | |
CN115687233A (zh) | 通信方法、装置、设备及计算机可读存储介质 | |
CN104065507A (zh) | 基于双平台复用技术的接入设备业务配置方法及系统 | |
CN109871404A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190301 |
|
RJ01 | Rejection of invention patent application after publication |