요청 중 하나에 대해 JSON 객체의 연속 스트림을 반환하는 JSON-RPC 서비스가 있습니다.Indy가있는 HTTP 연속 패킷 스트림
e.e. :
{id:'1'}
{id:'2'}
//30 minutes of no data
{id:'3'}
//...
물론 스트림이 무한하기 때문에 Content-Length가 없습니다.
데이터를 수신하고 구문 분석하기 위해 사용자 정의 TStream 자손을 사용하고 있습니다. 그러나 내부적으로 TIdHttp
은 데이터를 버퍼링하고 RecvBufferSize
바이트를받을 때까지 데이터를 전달하지 않습니다. 분 전 중요 메시지 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 이하로 읽습니다.
나는 가난한 영혼이이 문제를 Indy 개발자에게 설명하려고했지만 2005 년에 그를 이해하지 못했던 2005 년에 this discussion을 발견했습니다. (읽을 거리가 슬픈 광경)
어쨌든, 그는 Iohandler 자손을 작성하여이 문제를 해결했지만, 2005 년에 다시 돌아왔다.
인디가 오픈 소스이기 때문에 수정 된 소스가 공개 될 수 있습니다. (다른 사람들에게 도움이된다면 공개해야합니다) – mjn
@mjn : 그 사실을 모릅니다. 고마워요. 코드가 추가되었습니다. – himself