リクエストの1つでJSONオブジェクトの連続ストリームを返すJSON-RPCサービスがあります。IndyのHTTP連続パケットストリーム
I.e. :
{id:'1'}
{id:'2'}
//30 minutes of no data
{id:'3'}
//...
もちろん、ストリームが無限であるためContent-Lengthはありません。
私はカスタムTStream子孫を使ってデータを受け取り、解析しています。しかし、内部でTIdHttp
はデータをバッファし、RecvBufferSize
バイトが受信されるまで私に渡されません。
これは、その結果:30分前大事メッセージは、30分前に配信されているはずなので、これはしないだろう
明らか{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
。
私はIndyが何を行うのかをしたいと思っています:利用可能なデータがある場合はRecvBufferSize以下に読み上げ、すぐに戻ります。
私は2005年からthis discussionを見つけましたが、Indyの開発者に問題を説明しようとしたが、彼は理解しませんでした。
とにかく、彼はカスタムIOHandlerの子孫を書くことでこれを回避しましたが、それは2005年に戻っています。今日はいくつかの解決策がありますか?
Indyがオープンソースであるため、修正されたソースが公表される可能性があります(また、他の人に役立つ場合もあります)。 – mjn
@mjn:それを知らなかった、ありがとう。コードを追加しました。 – himself