如何将thrift结构传递到Python服务器

如何将thrift结构传递到Python服务器,python,thrift,Python,Thrift,我正在使用thrift进行python服务器和java客户端之间的rpc通信。在我的thrift处理程序中,我有一个函数要传递thrift结构。对于基本数据类型传递,我可以直接执行以下操作: def assignValue(self, variable, value): 但是现在我想传递struct,而不是variable(字符串类型)。我该怎么做 附:我是新加入thrift的,我正在关注thrift的官方信息,如果有任何其他文件可以帮助我,请随意传递。谢谢 下面是一个在Thrift IDL中

我正在使用thrift进行python服务器和java客户端之间的rpc通信。在我的thrift处理程序中,我有一个函数要传递thrift结构。对于基本数据类型传递,我可以直接执行以下操作:

def assignValue(self, variable, value):
但是现在我想传递struct,而不是variable(字符串类型)。我该怎么做


附:我是新加入thrift的,我正在关注thrift的官方信息,如果有任何其他文件可以帮助我,请随意传递。谢谢

下面是一个在Thrift IDL中传递结构的简单示例:

这里有一个Java客户端和服务器示例:

它显示返回一个结构(但传递一个结构很容易推断)。Python和Java的ThriftBook repo中也有许多示例(所有源代码均来自Apache Thrift的程序员指南):

示例struct return thrift idl如下所示:

struct TradeReport {
    1: string  symbol,
    2: double  price,
    3: i32     size,
    4: i32     seq_num
} 

service TradeHistory {
    TradeReport get_last_sale(1: string Symbol) 
}
清单中的Java客户端如下所示:

import java.io.IOException;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.protocol.TBinaryProtocol;

public class ThriftClient {
    public static void main(String[] args) 
            throws IOException, TException {
        TSocket trans = new TSocket("localhost", 9090);
        TBinaryProtocol proto = new TBinaryProtocol(trans);
        TradeHistory.Client client = new TradeHistory.Client(proto);

        trans.open();
        for (int i = 0; i < 1000000; i++) {
            TradeReport tr = client.get_last_sale("APPL");
        }
        trans.close();
    }
}
import java.io.IOException;
导入org.apache.thrift.TException;
导入org.apache.thrift.transport.TSocket;
导入org.apache.thrift.protocol.TBinaryProtocol;
公共类节俭客户机{
公共静态void main(字符串[]args)
抛出IOException、TexException{
TSocket trans=新的TSocket(“本地主机”,9090);
TBinaryProtocol proto=新的TBinaryProtocol(trans);
TradeHistory.Client=newtradehistory.Client(proto);
trans.open();
对于(int i=0;i<1000000;i++){
TradeReport tr=client.get_last_sale(“APPL”);
}
trans.close();
}
}
其他IDL示例如下(包括几个传递结构的示例):


您能解释一下“TradeReport”类在您的客户端代码段中是如何定义的以及在哪里定义的吗?t完整的项目在这里:TradeReport类型在上面的IDL中定义。要为Java生成它,您可以使用thrift编译器和类似“$thrift--gen Java myidl.thrift”的命令
struct TradeReport {
    1: string  symbol,
    2: double  price,
    3: i32     size,
    4: i32     seq_num
} 

service TradeHistory {
    TradeReport get_last_sale(1: string Symbol) 
}
import java.io.IOException;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.protocol.TBinaryProtocol;

public class ThriftClient {
    public static void main(String[] args) 
            throws IOException, TException {
        TSocket trans = new TSocket("localhost", 9090);
        TBinaryProtocol proto = new TBinaryProtocol(trans);
        TradeHistory.Client client = new TradeHistory.Client(proto);

        trans.open();
        for (int i = 0; i < 1000000; i++) {
            TradeReport tr = client.get_last_sale("APPL");
        }
        trans.close();
    }
}