ASP.NET Core SignalR 是一个开源库,可简化向应用程序添加实时 Web 功能的过程。实时 Web 功能使服务器端代码能够即时向客户端推送内容。
SignalR 的适用场景:
- 需要来自服务器频繁更新的应用程序,例如游戏、社交网络、投票、拍卖、地图和 GPS 应用。
- 仪表板和监控应用程序,例如公司仪表板、即时销售更新或旅行提醒。
- 协作应用程序,例如白板应用和团队会议软件。
- 需要通知的应用程序,社交网络、电子邮件、聊天、游戏、旅行提醒以及许多其他应用都使用通知。
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 个数字。
