Delphi で SignalR Core を扱う

· コンポーネント

 ASP.NET Core SignalR は、アプリケーションにリアルタイム Web 機能を追加することを簡素化するオープンソースライブラリです。リアルタイム Web 機能を使うと、サーバー側のコードからクライアントへ即座にコンテンツをプッシュできます。

SignalR が適するケース:


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

Delphi のコード例 

SignalRCore.Invoke('SendMessage', ['John', 'Hello All.'], 'id-000001');
procedure OnSignalRCoreCompletion(Sender: TObject; Completion: TSignalRCore_Completion);
begin
  if Completion.Error <> '' then
    ShowMessage('Something goes wrong.')
  else
    ShowMessage('Invocation Successful!');
end; 

呼び出し(Invocations): 呼び出し側はメッセージを呼び出され側へ送信し、呼び出しが完了したことを示すメッセージと、必要に応じて呼び出し結果を受け取ります。

例:クライアントが SendMessage メソッドを呼び出し、パラメーターとしてユーザー名とテキストメッセージを渡します。Invocation Id を送信して、サーバーから結果メッセージを受け取ります。 

SignalRCore.Invoke('SendMessage', ['John', 'Hello All.']); 

非ブロッキング呼び出し(Non-Blocking Invocations): 呼び出し側はメッセージを呼び出され側へ送信し、その呼び出しに対する追加メッセージを期待しません。Invocation ID 値を指定せずに呼び出しを送信でき、これにより呼び出しが「ノンブロッキング」であることを示します。

例:クライアントが SendMessage メソッドを呼び出し、パラメーターとしてユーザー名とテキストメッセージを渡します。クライアントはサーバーから呼び出し結果のレスポンスを期待しません。 

SignalRCore.InvokeStream('Counter', [10, 500], 'id-000002');
procedure OnSignalRCoreStreamItem(Sender: TObject; StreamItem: TSignalRCore_StreamItem; var Cancel: Boolean);
begin
  DoLog('#stream item: ' + StreamItem.Item);
end;
procedure OnSignalRCoreCompletion(Sender: TObject; Completion: TSignalRCore_Completion);
begin
  if Completion.Error <> '' then
    ShowMessage('Something goes wrong.')
  else
    ShowMessage('Invocation Successful!');
end; 

ストリーミング呼び出し(Streaming Invocations): 呼び出し側はメッセージを呼び出され側へ送信し、呼び出され側から 1 つ以上の結果と、呼び出しの終了を示すメッセージを順に受け取ります。

例:クライアントが Counter メソッドを呼び出し、500 ミリ秒間隔で 10 個の数値を要求します。