2010-07-30 6 views
2

원격 메소드를 실행하려면 상태 비 저장 서버를 프로그래밍해야합니다. 클라이언트는 JSON 매개 변수와 함께 REST를 사용하여 메소드 이름과 매개 변수를 전달합니다. 결과를 서비스 한 후 세션이 닫힙니다. Indy10, TCP/IP를 프로토콜로 사용해야하므로 IdHTTPServer를 사용합니다.상태 비 저장 HTTP 세션의 진행 피드백

큰 결과 집합은 Indy10에 의해 청크되고 일부 클라이언트로 전송됩니다.

내 문제는 지금 : 그들이 결과를 생성하는 데 시간이 더 걸릴 경우 서버에

방법이 진행 정보를 제공합니다. 이들은 짧은 메시지입니다. 클라이언트에 어떻게 다시 쓸 수 있습니까?

지금까지 서버에서 writeflush을 사용했지만 클라이언트는 진행률 정보를 포함하여 전체 결과 집합을 반환하기 전에 요청이 끝나기를 기다렸습니다. 진행 정보를 클라이언트에 표시/처리하고 동일한 요청에 대해 추가 데이터를 수신하도록 연결을 유지하려면 어떻게해야합니까?

답변

1

일반 HTTP 클라이언트 구성 요소 TIdHTTP 대신 클라이언트 측에서 IdTCPClient 단위의 Indy 클래스 TIdTCPClientCustom을 사용하여 요청을 보내고 응답을 처리 할 수 ​​있습니다.

이 클래스는 서버 응답 처리를 완벽하게 제어합니다. 메시지 브로커 메시징 프로토콜 용 클라이언트를 구현하기위한 시작 지점으로 TIdTelnet 클래스를 사용했으며 텍스트 및 이진 데이터 모두 안정적이고 안정적이라는 것을 알았습니다.

받는 스레드에서 들어오는 데이터는 구분 기호로 읽히고 진행 정보에 대해 청크로 구문 분석되어 즉시 처리 될 수 있습니다.

+0

TIdHTTPServer를 사용해야합니다. REST (TIdHTTP의 매개 변수가있는 GET)를 구현하고 있습니다. writebufferflush와 같은 것을 사용하고 싶지만, 작동하지 않습니다. 항상 메시지 상자에서 첫 번째 writeln을 얻은 다음 나머지는 버립니다. –

+0

편집을 참조하십시오. 제안 사항은 TIdHTTP 대신 클라이언트 쪽에서 TIdTCPClientCustom을 사용하여 서버 응답 처리를 완벽하게 제어하는 ​​것입니다. – mjn

관련 문제