リクエストの1つに対してJSONオブジェクトの連続ストリームを返すJSON-RPCサービスがあります。
すなわち:
{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以下まで読み取り、すぐに戻る。
私は2005年からこの議論を見つけました。そこでは、貧しい人々がインディの開発者に問題を説明しようとしましたが、彼らは彼を理解していませんでした。(それを読んでください;それは悲しい光景です)
とにかく、彼はカスタムIOHandlerの子孫を作成することでこれを回避しましたが、それは2005年にさかのぼります。おそらく、今日、いくつかの準備が整ったソリューションがありますか?