rpc - 关于thrift --gen php:rest 参数有嵌套的结构体的问题?
程序员文章站
2022-04-30 16:09:58
...
使用thrift, php作为客户端。
thrift协议如下:
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);
}
调用代码如下:
//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]]));
是不是thrift --gen php:rest不支持嵌套结构体参数?
回复内容:
使用thrift, php作为客户端。
thrift协议如下:
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);
}
调用代码如下:
//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]]));
是不是thrift --gen php:rest不支持嵌套结构体参数?