API SignalR

SignalR

 

SignalR 구성 요소는 SignalR 서버에 연결하기 위한 전송으로 WebSocket을 사용합니다. 이 전송이 지원되지 않으면 오류가 발생합니다.

SignalR 클라이언트 구성 요소에는 다음 데이터를 설정할 수 있는 SignalR이라는 속성이 있습니다:

 

 

클라이언트는 Text 또는 Binary 데이터 전송을 지원합니다.

 

 

Hubs Messages

 

Hubs API를 사용하면 클라이언트에서 서버 메서드를, 서버에서 클라이언트 메서드를 호출할 수 있습니다. 영구 연결에 사용되는 프로토콜은 RPC(원격 프로시저 호출) 의미론을 표현할 만큼 풍부하지 않습니다. 그러나 이것이 허브 연결에 사용되는 프로토콜이 영구 연결에 사용되는 프로토콜과 완전히 다르다는 것을 의미하지는 않습니다. 오히려 허브 연결에 사용되는 프로토콜은 대부분 영구 연결 프로토콜의 확장입니다.

 

클라이언트가 서버 메서드를 호출할 때, 영구 연결에서처럼 더 이상 자유 형식 문자열을 전송하지 않습니다. 대신 메서드를 호출하는 데 필요한 모든 정보를 포함하는 JSON 문자열을 전송합니다. 다음은 클라이언트가 서버 메서드를 호출하기 위해 전송하는 샘플 메시지입니다:

 


WriteData('{"H":"chathub","M":"Send","A":["Delphi Client","Test message"],"I":0}');

 

페이로드에는 다음 속성이 있습니다:

I – invocation 식별자 – 응답을 요청과 일치시킬 수 있게 합니다

H – 허브의 이름

M – 메서드의 이름

A – arguments(배열, 메서드에 매개변수가 없는 경우 비어 있을 수 있음)

 

 

문자열 인수에 큰따옴표가 있으면 "를 \"로 교체하십시오.

 

예: 인수가 {"test":1}인 경우, 인수를 {\"test\":1}로 보내십시오.

 

WriteData('{"H":"chathub","M":"Send","A":["{\"test\":1}"],"I":0}');

 

권한 부여

각 연결에 사용자를 연결하고 어떤 사용자가 리소스에 액세스할 수 있는지 필터링하기 위해 Authentication을 활성화할 수 있습니다. Authentication은 Bearer Token을 사용하여 구현됩니다: 클라이언트가 access token을 제공하고 서버가 이 token을 검증하여 사용자를 식별하는 데 사용합니다.

 

현재 Bearer Tokens만 지원됩니다:

 

여기서는 토큰을 Signal 서버에 직접 전달합니다(토큰이 다른 서버에서 얻어졌기 때문입니다).

 

 

 


oSignalR := TsgcWSAPI_Signal.Create(nil);
oSignalR.SignalR.Enabled := True;
oSignalR.SignalR.Authentication := srcBearerToken;
oSignalR.SignalR.BearerToken.Token := 'token here';

구성 요소에는 다음 이벤트가 있습니다:

 

OnSignalRConnect

이 이벤트는 클라이언트가 서버에 성공적으로 연결될 때 발생합니다.

 

OnSignalRDisconnect

이 이벤트는 클라이언트가 서버에서 연결이 끊어질 때 발생합니다.

 

OnSignalRError

WebSocket 연결에 오류가 있을 때 이 이벤트가 호출됩니다.

 

OnSignalRMessage

persistent 연결에 사용되는 프로토콜은 매우 간단합니다. 서버에 전송되는 메시지는 raw 문자열일 뿐입니다. 특정 형식이 필요하지 않습니다. 클라이언트에 전송되는 메시지는 더 구조화되어 있습니다. 메시지에서 찾을 수 있는 속성은 다음과 같습니다:

 

C – 메시지 id, 모든 비-KeepAlive 메시지에 존재함

M – 실제 데이터를 포함하는 배열입니다.

 


{"C":"d-9B7A6976-B,2|C,2","M":["Welcome!"]}

 

OnSignalRBinary

이 이벤트는 서버로부터 바이너리 데이터가 수신될 때 호출됩니다.

 

OnSignalRResult

서버 메서드가 호출되면, 서버는 호출이 완료되었다는 확인을 클라이언트에 invocation id를 보냄으로써 반환하고, 메서드가 값을 반환한 경우 반환 값을, 메서드 호출이 실패한 경우 오류를 반환합니다.

다음은 서버 메서드 호출의 샘플 결과입니다:

 


{"I":"0"}

 

호출 식별자가 "0"이었던 서버 void 메서드가 성공적으로 완료되었습니다.

 


{"I":"0", "R":42}

 

호출 식별자가 "0"인 숫자를 반환하는 서버 메서드가 성공적으로 완료되어 값 42를 반환했습니다.

 


{"I":"0", "E":"Error occurred"}

 

OnSignalRKeepAlive

이 이벤트는 서버로부터 KeepAlive 메시지가 수신될 때 발생합니다.