RPC是远程过程调用(Remote Procedure Call)的缩写形式。
SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。 (推荐学习: swoole视频教程)
进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。有两种类型的进程间通信(IPC)。
本地过程调用(LPC)LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
远程过程调用(RPC)RPC类似于LPC,只是在网上工作。RPC开始是出现在Sun微系统公司和HP公司的运行UNⅨ操作系统的计算机中。
Swoole框架提供的RPC服务器支持了单连接并发、PHP-FPM下长连接维持等特性。在车轮互联大规模应用,构建了4层架构的服务化架构。
很多企业使用Http Rest实现RPC通信,实现简单可以利用到很多现成的工具和方案。但是Http通信协议存在2个严重的缺陷。
Http不支持单连接并发,如果要同时并发很多请求,必须创建大量TCP连接。如果php-fpm开启500个进程,每次需要128个并发,那么就需要创建64000个TCP连接。
Http对长连接支持不够好,很多Http程序都是设计为短连接的,在请求时创建TCP连接、请求结束时close,这会带来额外的网络通信消耗
Swoole框架的RPC客户端使用16字节固定包头+包体的通信方式,支持单连接并发、支持在php-fpm开启长连接。
php-fpm长连接
在php-fpm中维持TCP长连接主要借助swoole扩展提供的SWOOLE_KEEP选项,客户端设置此选项后,在请求结束时不会关闭连接,新的请求到来后可以复用TCP连接。另外底层内置了长连接检测的能力。
在执行$client->connect()自动检测连接是否可用,如果复用的连接已经失效,底层会重新创建一个新的TCP长连接。
在执行$client->connect()自动清理垃圾数据,避免上一次客户端超时残留的数据导致服务异常
$socket = new \swoole_client(SWOOLE_SOCK_TCP | SWOOLE_KEEP, WOOLE_SOCK_SYNC); $socket->set(array( 'open_length_check' => true, 'package_max_length' => $this->packet_maxlen, 'package_length_type' => 'N', 'package_body_offset' => RPCServer::HEADER_SIZE, 'package_length_offset' => 0, ));
Atas ialah kandungan terperinci php的swoole和rpc区别. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!