首頁  >  文章  >  後端開發  >  rpc - 關於thrift --gen php:rest 參數有嵌套的結構體的問題?

rpc - 關於thrift --gen php:rest 參數有嵌套的結構體的問題?

WBOY
WBOY原創
2016-09-23 11:31:021305瀏覽

使用thrift, php作为客户端。

thrift协议如下:

<code>service
struct A{
    required i32 a1
}

struct B{
    required i32 b1,
    required A a
}
service TestService{
    resa testa(1:required a reqa);
    resb testb(1:required B reqb);
}</code>

调用代码如下:

<code>//socket
$socket = new \Thrift\Transport\TSocket($host, $port, $name);
$socket->setSendTimeout($timeout);
$socket->setRecvTimeout($timeout);

//transport
$transport = new \Thrift\Transport\TFramedTransport($socket);
$transport->open();

//protocol
$protocol           = new \Thrift\Protocol\TBinaryProtocol($transport);
$clientName    = "\\ThriftClient\\{$name}Client";
$restName      = "\\ThriftClient\\{$name}Rest";
$connection       = new $restName(new $clientName($protocol));

//调用成功
$connection->testa(json_encode(['a1'=>2]));
//参数是嵌套的结构体,则调用失败
$connection->testb(json_encode(['b1'=>1,a=>['a1'=>2]]));</code>

是不是thrift --gen php:rest不支持嵌套结构体参数?

回复内容:

使用thrift, php作为客户端。

thrift协议如下:

<code>service
struct A{
    required i32 a1
}

struct B{
    required i32 b1,
    required A a
}
service TestService{
    resa testa(1:required a reqa);
    resb testb(1:required B reqb);
}</code>

调用代码如下:

<code>//socket
$socket = new \Thrift\Transport\TSocket($host, $port, $name);
$socket->setSendTimeout($timeout);
$socket->setRecvTimeout($timeout);

//transport
$transport = new \Thrift\Transport\TFramedTransport($socket);
$transport->open();

//protocol
$protocol           = new \Thrift\Protocol\TBinaryProtocol($transport);
$clientName    = "\\ThriftClient\\{$name}Client";
$restName      = "\\ThriftClient\\{$name}Rest";
$connection       = new $restName(new $clientName($protocol));

//调用成功
$connection->testa(json_encode(['a1'=>2]));
//参数是嵌套的结构体,则调用失败
$connection->testb(json_encode(['b1'=>1,a=>['a1'=>2]]));</code>

是不是thrift --gen php:rest不支持嵌套结构体参数?

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn