【发布时间】:2013-03-14 23:11:18
【问题描述】:
我有一个 JSON-RPC 服务,它针对其中一个请求返回一个连续的 JSON 对象流。
即:
{id:'1'}
{id:'2'}
//30 minutes of no data
{id:'3'}
//...
当然,没有 Content-Length,因为流是无穷无尽的。
我正在使用自定义 TStream 后代来接收和解析数据。但在内部 TIdHttp 缓冲数据并且在收到 RecvBufferSize 字节之前不会将其传递给我。
这会导致:
{id:'1'} //received
{id:'2'} //buffered by Indy but not received
//30 minutes of no data
{id:'3'} //this is where Indy commits {id:'2'} to me
显然这不行,因为 30 分钟前重要的消息应该在 30 分钟前送达。
我希望 Indy 做套接字所做的事情:如果有可用数据,则读取到 RecvBufferSize 或更少并立即返回。
我发现 this discussion 从 2005 年开始,一些可怜的人试图向 Indy 开发人员解释这个问题,但他们不理解他。 (阅读它;这是一个悲伤的景象)
无论如何,他通过编写自定义 IOHandler 后代来解决这个问题,但那是在 2005 年,也许今天有一些现成的解决方案?
【问题讨论】: