Heim >Backend-Entwicklung >PHP-Tutorial >rpc - Was das Problem betrifft, dass thrift --gen php:rest-Parameter verschachtelte Strukturen haben?
使用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不支持嵌套结构体参数?