SignalR Core Delphi

· 组件

 ASP.NET Core SignalR 是一个开源库,可简化向应用程序添加实时 Web 功能的过程。实时 Web 功能使服务器端代码能够即时向客户端推送内容。

SignalR 的适用场景:


SignalR Core sgcWebSockets 组件使用 WebSocket 作为传输方式连接到 SignalR Core 服务器,若不支持此传输方式,将引发错误。 

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 方法,并传递用户名和文本消息作为参数,同时发送调用 ID 以从服务器获取结果消息。 

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

非阻塞调用(Non-Blocking Invocations):调用方向被调用方发送消息,且不期望收到关于此调用的任何进一步消息。调用可以不带调用 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):调用方向被调用方发送消息,并期望被调用方返回一个或多个结果,最后再收到一条指示调用结束的消息。

示例:客户端调用 Counter 方法,请求以 500 毫秒的间隔返回 10 个数字。