workerman-thrift-rpc

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语言开发的服务。

下载

下载Thrift RPC远程调用框架

Fork on Github  下载ZIP压缩文件 下载3828次

特性

  • 使用PHP开发
  • PHP多进程
  • 支持libevent事件轮询库,支持高并发
  • 支持服务平滑重启
  • 支持PHP文件更新检测及自动加载
  • 支持原生thrift协议,自动生成c/c++/java等各种语言的客户端
  • 集成统计监控模块,方便查看服务调用量、成功率、耗时等情况
  • 自带PHP客户端,支持异步并发调用,实现并行计算
  • PHP客户端支持故障节点自动踢出
  • PHP客户端支持故障节点恢复检测

服务端开发示例

1、定义一个Thrift的IDL文件 如HelloWorld.thrift


namespace php Services.HelloWorld
service HelloWorld
{
    string sayHello(1:string name);
}
			

2、使用thrift编译生成框架文件

thrift -gen php:server HelloWorld.thrift && cp ./gen-php/Services/HelloWorld ./Applications/ThriftRpc/Services/ -r

3、完善框架文件逻辑

./Applications/ThriftRpc/Services/HelloWorld/HelloWorldHandler.php
<?php
namespace Services\HelloWorld;

class 
HelloWorldHandler implements HelloWorldIf {
  public function 
sayHello($name)
  {
      return 
"Hello $name";
  }
}

4、在Applications/ThriftRpc/start.php 中初始化服务,包括进端口和程数


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';
			

5、启动服务端如下:

php start.php start -d

php thrift rpc 启动界面

客户端使用示例

<?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"));

workerman-thrift集成了统计监控模块,界面如下(访问地址:http://ip:55757 其中ip为运行thrift服务的ip demo

thrift rpc 统计监控页面

性能

环境

系统: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

处理曲线平稳,无内存泄漏,无流量抖动

相关连接

Powered by web-msg-sender!

蜀ICP备13029294号

联系我们
  • QQ群1:257046084(2000人已满)
    QQ群2:137410824(2000人已满)
    QQ群3:527941005(500人已满)
    QQ群4:172789145(2000人已满)
    QQ群5:605328640(2000人)
    游戏开发群:564297822
    商务合作联系QQ:2202055656
    邮箱:walkor@workerman.net