WAMP | RPC Progress Results

때때로 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');