当前位置: 首页 > 专利查询>田雨专利>正文

基于PHP的高性能远程过程调用(RPC)系统及方法技术方案

技术编号:38881075 阅读:26 留言:0更新日期:2023-09-22 14:11
本发明专利技术公开了基于PHP的高性能远程过程调用(RPC)系统及方法,大部分编程语言都具有良好且成熟的解决方案,但就目前PHP语言还没有广泛的成熟方案以及对应方案,本发明专利技术的目的在于,提供一种PHP高性能远程过程调用(RPC)框架。能够让很多老项目或单体架构的项目快速完成分布式系统和微服务架构。本发明专利技术的在PHP领域中使用swoole进行网络通信和多进程监听,RPC代理隐藏参数封装、序列化、反序列化等细节,RPC服务处理多进程持续监听RPC代理的消息,并将消息通过反序列化转成原始请求参数,再通过反射调用和序列化将服务数据发送给RPC代理,提供服务注册发现中心统一对服务进行管理,接入了链路追踪能够让RPC调用多个服务的过程一目了然,同时也可以使用RPC代理自动生成服务端调用接口,进一步隐藏参数封装、序列化、网络传输的细节,对开发人员友好。对开发人员友好。对开发人员友好。

【技术实现步骤摘要】
基于PHP的高性能远程过程调用(RPC)系统及方法


[0001]本申请涉及的是计算机
中PHP编程语言,RPC(远程过程调用)系统及方法。

技术介绍

[0002]RPC(远程过程调用),在分布式系统中实现跨网络边界的通信和协作。在分布式系统中,RPC 技术可以用于服务间的通信、集群管理、任务调度等方面。在微服务架构中 RPC 技术是实现服务之间通信的重要手段。每个微服务可以作为一个独立的服务,并通过 RPC 进行相互调用,实现服务间的解耦合灵活性。RPC 技术可以帮助构建高度可伸缩、松耦合的微服务体系。在 Web 开发中,RPC 技术可以用于浏览器与服务器之间的通信。通过 RPC,浏览器可以向服务器发起请求并获取响应,实现前后端的数据交互和协作。常见的 Web 开发框架如gRPC、JSON

RPC 等都使用了 RPC 技术。总之,RPC 技术在许多领域都具有广泛的应用,特别是在分布式系统、微服务架构和 Web 开发中。它可以帮助不同组件、服务或节点之间进行高效的通信和协作,实现系统的可扩展性、灵活性和性能优化。
[0003]在上述领域中,大部分编程语言都具有良好且成熟的解决方案,但就目前 PHP 语言还没有广泛的成熟方案以及对应方案,在基于TCP/IP协议请求的 RPC 调用,在 PHP 中有天然的弱势,无法保持长连接,性能方面就不具优势。
[0004]随着现代应用的发展,越来越多的公司业务规模上涨,单体架构无法应对高负载、高并发、高可用,其次是开发周期增加,迭代变慢。单体中任何服务的流量变大,会导致其他服务无法进行访问。单体架构也会导致运维成本的增加。
[0005]所以,目前的趋势是分布式系统和微服务架构。那么想完成分布式系统和微服务架构,RPC(远程过程调用)就是一个必需的手段。PHP 想要想完成分布式系统和微服务架构,RPC的研发势在必行。
[0006]就目前的 PHP RPC 发展趋势来看,虽然有几款不错的 RPC 框架,但是都在他们的生态下,比如:Hyperf 框架,服务端和客户端都必须使用 Hyperf 才能实现分布式系统和微服务架构。这就会导致需要将老项目进行重构和移植,那么开发成本和试错成本就非常高了。

技术实现思路

[0007]本专利技术的目的在于,提供一种 PHP 高性能远程过程调用(RPC)框架。能够让很多老项目或单体架构的项目快速完成分布式系统和微服务架构。
[0008]本专利技术的技术方案:1.包括基于 Swoole 的网络通信技术,提供实际的网络协议和异步、同步网络传输通信,多进程模式;2.参数封装、序列化和反序列化,将RPC 客户端的请求参数封装并序列化成二进制,通过网络传输给RPC服务端,服务端进行二进制的反序列化获取客户端参数;
3.RPC 代理,提供了多种调用方式包括异步调用和同步调用,获取参数,调用上述参数封装与序列化步骤,进行网络传输通信;4.RPC 服务处理,定义要暴露给客户端的服务接口,包括服务名、函数名、参数类型、返回值类型等,建立并开启网络连接,利用多进程模式监听客户端消息,通过反序列化和获取参数并且通过反射调用获取数据,再次通过参数封装与序列化以及网络通信发送回客户端;5.服务注册与发现,注册服务、服务发现、服务列表返回、负载均衡、远程调用、失败处理、监听更新、服务下线;6.链路追踪,RPC 调用时,多个服务相互调用会,如果有一个服务发生问题,排查问题非常困难。所以需要引入链路追踪功能。RPC 客户端在调用时需要访问链路追踪接口,接口将这次访问标记一个 64 位 ID,当 A 服务调用 B 服务时,再生成一个 A 服务的 64 位 ID,依此类推。直到调用结束后,可以查看直到本次 RPC 客户端调用了一次调用了哪些服务;7.RPC 代理生成,在RPC客户端使用代理之前可以将自动生成代理,将服务接口,包括服务名、函数名、参数类型、返回值类型等,自动封装成调用的代理类,可以进一步减少底层调用细节,简化调用步骤。
附图说明
[0009]图1为本专利技术的总架构图。
[0010]图2为RPC服务处理流程示意图。
[0011]图3为RPC代理流程示意图。
[0012]图4为参数封装流程示意图。
[0013]图5、图6为序列化与反序列化流程示意图。
[0014]图7、图8为服务注册与服务发现流程示意图。
[0015]图9为链路追踪示意图。
具体实施方式
[0016]下面将结合附图对本专利技术的技术方案进行清楚、完整地描述,显然,所描述的过程仅仅是本专利技术的一部分基础方案,而不是全部的方案。
[0017]本专利技术的提供了基于 PHP 的高性能远程过程调用(RPC)系统及方法,包括:图1总架构图中,将上述技术方案,统一封装成一个RPC中间件,图中所述RPC

proxy为RPC代理,将客户端请求的参数封装、序列化,发送给服务端,同时获取服务端返回的数据,反序列化交给客户端、图中所述RPC

common存放序列化、反序列化、封装请求参数对象和封装响应对象、图中所述RPC

Handler为服务处理,持续监听客户端的消息,收到消息后进行反序列化获取请求参数,并且通过反射调用服务端暴露的接口,将返回的数据再次封装与序列化发送给客户端、图中所述的RPC

register为服务注册与发现中心,将服务端暴露的接口注册,客户端根据服务名称发现服务;架构图中是工作流程如下:1.S1RPC客户端将请求的服务名称、请求的类名、请求的函数、参数、文件,以及异
步的回调函数通过代理发起RPC请求;2.S2在RPC代理中,把上述S1中的所有参数,封装成Request对象;3.S3将Request对象,封装、序列化;4.S4将S1中服务名称在RPC

register中查找其服务,并返回ip地址和端口号;5.S5通过swoole的网络传输能力,将S3中的字节流发送到RPC

handler处理;6.S6中RPC

handler接收字节流后,通过RPC

common中的反序列化获取相关请求的类名、请求的函数、参数、文件以及异步的回调函数;7.S8中确定请求的类名、请求的函数、参数、文件以及异步的回调函数等合法后,通过反射调用S9获取服务端暴露的类、函数,S10将服务端请求的数据交给RPC

handler;8.S11中RPC

handler将服务端请求的数据通过RPC

common封装成响应对象,并序列化;9.S12将通过swoole的网络传输能力,将S11中的数据发送给RPC

proxy进行处理;10.S13通过RPC

commo反序列化获取服务端数据,S14将最终数据返回给RPC客户端;11.S7中RPC

han本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于PHP的高性能远程过程调用(RPC)系统及方法,其特征在于,包括:在PHP领域中,网络传输、参数封装、序列化和反序列化、RPC 代理、RPC 服务处理、服务注册与发现、链路追踪、RPC 代理生成。2.根据权利要求1中所述网络传输,其特征在于,所述方法:所述基于swoole网络通信提供 TCP/IP、HTTP 的协议,以及同步和异步两种通信模式和基于swoole的多进程模型。以实现权利要求1中所述的RPC 代理和权利要求1中的RPC 服务处理之间的数据传输,和权利要求1中的RPC 服务处理多进程监听客户端消息。3.根据权利要求1中所述的参数封装,其特征在于,所述方法:需要将权利要求1中所述的RPC 代理中的需要请求的服务名称、服务的接口、请求的参数、请求的文件参数封装成Request对象。4.根据权利要求1中所述的序列化和反序列化,其特征在于,所述方法:将权利要求1中所述的参数封装成Request对象根据数据边界的size、数据报文包头、报文包体协议,如果是文件参数需要将二进制转成每一行带有单独的数据边界的size、数据报文包头、报文包体协议的信息,转成可以通过网络传输的字节流。反序列化则将字节流转成初始的Request对象和文件参数。5.根据权利要求1中所述的RPC 代理,其特征在于,所述方法:可以使用权利要求1中的RPC 代理生成的调用接口,其中隐藏了权利要求1中所述的网络传输、参数封装、序列化和反序列化、服务发现等相关逻辑,使得远程过程调用(RPC)变得简单,不复杂,对开发人员友好。6.根据权利要求1中所述的RPC 服务处理,其特征在于,所述方法:将服务暴露的接口上传服务注册中心、绑定一个网络地址(如 IP 地址和端口)、在启动服务时候,使用swoole的多进程模型监听客户端的消息,再通过所述权利要求1中反序列化获取Request请求对象,并反射调用暴露的接口,再将返回的数据通过权利要求1中所述的参数封装,封装成Response对象,再通过所述...

【专利技术属性】
技术研发人员:田雨
申请(专利权)人:田雨
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1