当前位置:Gxlcms > PHP教程 > rpc-关于thrift--genphp:rest参数有嵌套的结构体的问题?

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

时间:2021-07-01 10:21:17 帮助过:101人阅读

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

人气教程排行