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