API SignalR

SignalR

 

SignalR コンポーネントは、SignalR サーバーへの接続にトランスポートとして WebSocket を使用します。このトランスポートがサポートされていない場合、エラーが発生します。

SignalRクライアントコンポーネントには、次のデータを設定できるSignalRというプロパティがあります:

 

 

クライアントはテキストまたはバイナリデータの送信をサポートしています。

 

 

ハブメッセージ

 

Hubs API を使用すると、クライアントからサーバーメソッドを、サーバーからクライアントメソッドを呼び出せます。永続接続に使用されるプロトコルは、RPC(リモートプロシージャ呼び出し)セマンティクスを表現できるほどリッチではありません。ただし、これはハブ接続に使用されるプロトコルが、永続接続に使用されるプロトコルとまったく異なるという意味ではありません。むしろ、ハブ接続に使用されるプロトコルは、ほとんどが永続接続用プロトコルの拡張です。

 

クライアントがサーバーメソッドを呼び出すとき、永続的な接続のような自由形式の文字列は送信しなくなります。代わりに、メソッドの呼び出しに必要な情報をすべて含む JSON 文字列を送信します。クライアントがサーバーメソッドを呼び出すために送信するサンプルメッセージを以下に示します:

 


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

 

ペイロードには以下のプロパティがあります。

I — 呼び出し識別子 — レスポンスをリクエストと照合するために使用されます

H – ハブの名前

M – メソッドの名前

A – arguments(配列。メソッドにパラメータがない場合は空でも構いません)

 

 

文字列引数にダブルクォートがある場合は「"」を「\"」に置き換えてください

 

例: 引数が {"test":1} の場合、引数を {\"test\":1} として送信します

 

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

 

認証

認証を有効にして、各接続にユーザーを関連付け、どのユーザーがリソースにアクセスできるかをフィルタリングできます。認証はBearer Tokenを使用して実装されます。クライアントはアクセストークンを提供し、サーバーはこのトークンを検証してユーザーを識別するために使用します。

 

現在 Bearer トークンのみがサポートされています:

 

ここでは、トークンを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

永続接続に使用されるプロトコルは非常にシンプルです。サーバーに送信されるメッセージは単なる生の文字列です。特定の形式である必要はありません。クライアントに送信されるメッセージはより構造化されています。メッセージに含まれるプロパティは次のとおりです:

 

C – メッセージ ID、KeepAlive 以外のすべてのメッセージに存在します

M — 実際のデータを含む配列。

 


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

 

OnSignalRBinary

このイベントはサーバーからバイナリデータを受信したときに呼び出されます。

 

OnSignalRResult

サーバーメソッドが呼び出されると、サーバーは呼び出しが完了したことを確認するために呼び出し ID をクライアントに送信します。また、メソッドが戻り値を持つ場合は戻り値も送信し、メソッドの呼び出しに失敗した場合はエラーを送信します。

サーバーメソッド呼び出しの結果サンプルを以下に示します:

 


{"I":"0"}

 

呼び出し識別子が「0」のサーバーvoidメソッドが正常に完了しました。

 


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

 

呼び出し識別子が "0" のサーバー メソッドが正常に完了し、値 42 を返しました。

 


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

 

OnSignalRKeepAlive

サーバーから KeepAlive メッセージを受信したときに発生します。