我想在thrift服务中使用一个流,例如,在一个服务方法中有一个流或类似的东西作为方法的参数(例如,能够将结果从IDataReader序列化为一个流,然后反序列化对其他服务器端数据的引用。)
我认为这不是明确可能的,但我想知道是否有另一种方法可以实现类似的目标。
感谢。
答案 0 :(得分:2)
Apache thrift不支持发送流。你可以得到的最接近的是发送一个字节数组。
要使用thrift实现类似流的体验,您可以创建一个以字节数组的形式返回流的下一部分的接口。
在C#语法中,它看起来像
interface MyService
{
int OpenStream(string path);
byte[] ReadNextBlock(int openedStreamId, long maxBlockSize);
}
OpenStream返回" stream id"在每次调用时传递给ReadNextBlock。在服务器端,您可以保存一个Dictionary(key - openStreamID,value - Stream),用于保持源流打开并从中读取下一个块。
您还可以在客户端创建一个辅助类,它将是Stream后代,并将使用OpenStream和ReadNextBlock来获取实际数据。