【问题标题】:Sending a stream as a property in Apache Thrift C#在 Apache Thrift C# 中将流作为属性发送
【发布时间】:2013-04-16 17:28:51
【问题描述】:

我想在 thrift 服务中使用流,例如,在服务方法中使用流或类似的东西作为方法的参数(例如,能够将 IDataReader 的结果序列化为一个流,然后反序列化对另一服务器端数据的引用)。

我认为这显然不可能,但我想知道是否有其他方法可以实现类似的目标。

谢谢。

【问题讨论】:

标签: c# streaming thrift


【解决方案1】:

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 来获取实际数据。

【讨论】:

  • 谢谢 - 我唯一的保留是我希望服务器在需要时请求更多数据(类似于 dataReader.Next() 或 Stream.GetBytes()) - 有没有怎么做?
  • 服务器已经有一个流,它可以用它做他想做的事。客户端可以反复调用ReadNextBlock,直到返回空数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2014-08-29
  • 2015-03-31
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多