ASP.NET Core SignalR は、アプリケーションにリアルタイム Web 機能を追加することを簡素化するオープンソースライブラリです。リアルタイム Web 機能を使うと、サーバー側のコードからクライアントへ即座にコンテンツをプッシュできます。
SignalR が適するケース:
- サーバーからの高頻度な更新を必要とするアプリ。例:ゲーム、ソーシャルネットワーク、投票、オークション、地図、GPS アプリ。
- ダッシュボードや監視アプリ。例:企業ダッシュボード、即時の販売情報、トラベルアラートなど。
- コラボレーションアプリ。例:ホワイトボードアプリやチームミーティングソフトウェアなど。
- 通知を必要とするアプリ。ソーシャルネットワーク、メール、チャット、ゲーム、トラベルアラートなど、多くのアプリが通知を活用しています。
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 個の数値を要求します。
