workerman-thrift-rpc是一个以workerman作为服务器容器,使用Thrift协议及其传输层模块搭建起来的跨语言的RPC远程调用框架。
workerman-thrift-rpc的目标是解决异构系统之间通信的问题,workerman-thrift-rpc使用PHP开发远程调用服务, 然后使用thrift自动生成C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml等这些语言的客户端, 通过这些客户端去调用PHP语言开发的服务。
namespace php Services.HelloWorld
service HelloWorld
{
string sayHello(1:string name);
}
thrift -gen php:server HelloWorld.thrift && cp ./gen-php/Services/HelloWorld ./Applications/ThriftRpc/Services/ -r
<?php
namespace Services\HelloWorld;
class HelloWorldHandler implements HelloWorldIf {
public function sayHello($name)
{
return "Hello $name";
}
}
require_once __DIR__ . '/ThriftWorker.php';
// helloworld
$hello_worker = new ThriftWorker('tcp://0.0.0.0:9090');
$hello_worker->count = 16;
$hello_worker->class = 'HelloWorld';
// another worker
//$another_worker = new ThriftWorker('tcp://0.0.0.0:9091');
//$another_worker->count = 16;
//$another_worker->class = 'AnotherClass';
php start.php start -d
<?php// 引入客户端文件
require_once 'yourdir/workerman/Applications/ThriftRpc/Clients/ThriftClient.php';
use ThriftClient\ThriftClient;
// 传入配置,一般在某统一入口文件中调用一次该配置接口即可
thriftClient::config(
array(
'HelloWorld' => array(
'addresses' => array(
'127.0.0.1:9090',
'127.0.0.2:9191',
),
'thrift_protocol' => 'TBinaryProtocol',//不配置默认是TBinaryProtocol,对应服务端HelloWorld.conf配置中的thrift_protocol
'thrift_transport' => 'TBufferedTransport',//不配置默认是TBufferedTransport,对应服务端HelloWorld.conf配置中的thrift_transport
),
'UserInfo' => array(
'addresses' => array(
'127.0.0.1:9393'
),
),
)
);
// ========= 以上在WEB入口文件中调用一次即可 ===========
// ========= 以下是开发过程中的调用示例 ==========
// 初始化一个HelloWorld的实例
$client = ThriftClient::instance('HelloWorld');
// --------同步调用实例----------
var_export($client->sayHello("TOM"));
// --------异步调用示例-----------
// 异步调用 之 发送请求给服务端(注意:异步发送请求格式统一为 asend_XXX($arg),既在原有方法名前面增加'asend_'前缀)
$client->asend_sayHello("JERRY");
$client->asend_sayHello("KID");
// 这里是其它业务逻辑
sleep(1);
// 异步调用 之 接收服务端的回应(注意:异步接收请求格式统一为 arecv_XXX($arg),既在原有方法名前面增加'arecv_'前缀)
var_export($client->arecv_sayHello("KID"));
var_export($client->arecv_sayHello("JERRY"));
系统:Debian GNU/Linux 6.0
cpu :Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz * 24
内存:64G
WorkerMan:开启24个Worker进程处理业务请求
压测软件:loadrunner
HelloWorld sayHello
吞吐量:平均8200/S
内存占用:24*12M=288M
cpu平均使用率:55%
load:16
流量:15M/S
处理曲线平稳,无内存泄漏,无流量抖动