Heim  >  Artikel  >  Backend-Entwicklung  >  rpc - 关于thrift --gen php:rest 参数有嵌套的结构体的问题?

rpc - 关于thrift --gen php:rest 参数有嵌套的结构体的问题?

WBOY
WBOYOriginal
2016-09-23 11:31:021252Durchsuche

使用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不支持嵌套结构体参数?

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn