欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

相关标签: php thrift rpc