ASP.NET Core SignalR é uma biblioteca open-source que simplifica a adição de funcionalidades web em tempo real às aplicações. A funcionalidade web em tempo real permite que o código do lado do servidor envie conteúdo aos clientes instantaneamente.
Bons candidatos para o SignalR:
- Aplicações que exigem atualizações de alta frequência do servidor. Exemplos: jogos, redes sociais, votações, leilões, mapas e aplicações de GPS.
- Dashboards e aplicações de monitoramento. Exemplos: dashboards corporativos, atualizações instantâneas de vendas ou alertas de viagem.
- Aplicações colaborativas. Aplicações de quadro branco e softwares de reuniões em equipe são exemplos de aplicações colaborativas.
- Aplicações que exigem notificações. Redes sociais, e-mail, chat, jogos, alertas de viagem e muitas outras aplicações usam notificações.
O componente SignalR Core do sgcWebSockets usa WebSocket como transporte para conectar a um servidor SignalR Core; se esse transporte não for compatível, um erro será disparado.
Exemplos de código em 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: o chamador envia uma mensagem ao destinatário e espera uma mensagem indicando que a invocação foi concluída e, opcionalmente, um resultado da invocação
Exemplo: o cliente invoca o método SendMessage e passa como parâmetros o nome do usuário e a mensagem de texto. Envia um Invocation Id para receber uma mensagem de resultado do servidor.
SignalRCore.Invoke('SendMessage', ['John', 'Hello All.']);
Non-Blocking Invocations: o chamador envia uma mensagem ao destinatário e não espera nenhuma mensagem adicional para essa invocação. As invocações podem ser enviadas sem um valor de Invocation ID. Isso indica que a invocação é "não bloqueante".
Exemplo: o cliente invoca o método SendMessage e passa como parâmetros o nome do usuário e a mensagem de texto. O cliente não espera nenhuma resposta do servidor sobre o resultado da invocação.
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: o chamador envia uma mensagem ao destinatário e espera um ou mais resultados retornados pelo destinatário, seguidos por uma mensagem indicando o fim da invocação.
Exemplo: o cliente invoca o método Counter e solicita 10 números com um intervalo de 500 milissegundos.
