workerman-thrift-rpc

workerman-thrift-rpc是一個以workerman作為服務器容器,使用協議及其傳輸層模塊搭建起來的跨語言的RPC遠程調用框架。

Yy4080私人影院 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遠程調用框架

  下載ZIP壓縮文件 下載8647次

特性

  • 使用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

處理曲線平穩,無內存泄漏,無流量抖動

相關連接

Yy4080私人影院

Yy4080私人影院版權所有 成都風禾網絡科技有限公司


Powered by web-msg-sender!




聯系我們
  • QQ群1:257046084 (2000人已滿)
    QQ群2:137410824 (2000人已滿)
    QQ群3:527941005 (2000人已滿)
    QQ群4:172789145 (2000人已滿)
    QQ群5:605328640 (2000人已滿)
    QQ群6:532976970 (2000人已滿)
    QQ群7:679148501 (2000人已滿)
    QQ群8:812483358 (2000人已滿)
    QQ群9:645569639 (2000人已滿)
    QQ群10:549059456 (2000人)
    游戲開發群:564297822(2000人)
    提示:一個人只能加一個群哦
    郵箱:walkor#workerman.net