때때로 Remote Procedure Call은 요청을 완료하기 위해 둘 이상의 결과가 필요합니다. 기본적으로 WAMP 1.0 프로토콜은 호출에서 Partial 결과를 허용하지 않습니다. 이것은 sgcWebSockets 라이브러리 전용 기능입니다.
흐름은 단순한 RPC와 매우 유사하지만, 여기서는 프로세스를 완료하기 위해 CallResult가 호출되기 전에 1개 이상의 부분 결과가 있습니다.
기본적으로 클라이언트는 서버로부터 프로시저를 요청하고, 서버는 결과 또는 오류를 보낼 수 있습니다. 결과를 보내는 경우, 이것은 최종 결과이거나 나중에 더 많은 결과를 보내야 하는 경우일 수 있습니다. 최종 결과인 경우 CallResult 메서드를 호출하고 프로세스가 완료됩니다. 보낼 결과가 더 있는 경우 CallProgressResult 메서드를 호출합니다.
예제: 클라이언트가 서버에 매초 서버 시간을 받고 20개의 메시지 후 중지하는 메서드를 요청합니다.
WAMP Server
procedure OnServerCall(Connection: TsgcWSConnection; const CallId, ProcUri, Arguments: string); var vNum: Integer; begin if ProcUri = 'GetProgressiveTime' then begin vNum := StrToInt(Arguments); for i := 1 to vNum do begin if i = 20 then oServerWAMP.CallResult(CallId, FormatDateTime('yyyymmdd hh:nn:ss', Now)) else oServerWAMP.CallProgressiveResult(CallId, FormatDateTime('yyyymmdd hh:nn:ss', Now)); end end else oServer.WAMP.CallError(CallId, 'Unknown method'); end;oServer := TsgcWebSocketServer.Create(nil); oServer.Port := 80; oServerWAMP := TsgcWSPServer_WAMP.Create(nil); oServerWAMP.OnCall := OnServerCallEvent; oServerWAMP.Server := oServer; oServer.Active := True;
WAMP Client
procedure OnCallResultClient(Connection: TsgcWSConnection; CallId, Result: string); begin ShowMessage(Result); end;procedure OnCallProgressResultClient(Connection: TsgcWSConnection; CallId, Result: string); begin ShowMessage(Result); end;procedure OnCallErrorClient(Connection: TsgcWSConnection; const Error: string); begin ShowMessage(Error); end;oClient := TsgcWebSocketClient.Create(nil); oClient.Host := '127.0.0.1'; oClient.Port := 80; oClientWAMP := TsgcWSPClient_WAMP.Create(nil); oClientWAMP.OnCallResult := OnCallResultClient; oClientWAMP.OnCallProgressResult := OnCallProgressResultClient; oClientWAMP.OnCallError := OnCallErrorClient; oClientWAMP.Client := oClient; oClient.Active := True; // After client has connected, request GetTime from server oClientWAMP.Call('GetProgressTime');