Um cliente Flutter para o ASP.NET Core SignalR. O cliente é capaz de invocar funções do hub no lado do servidor e receber invocações de método emitidas pelo servidor.
Orientação gerada a partir de informações públicas. Apenas para referência.
Um cliente Flutter para o ASP.NET Core SignalR, permitindo comunicação em tempo real entre aplicativos Flutter e backends .NET Core. Ele suporta a invocação de métodos do hub no lado do servidor e o recebimento de chamadas de método do servidor, tornando-o ideal para atualizações em tempo real, aplicativos de chat e ferramentas colaborativas. O pacote funciona em Android, iOS, macOS, Windows e Linux, garantindo compatibilidade ampla com plataformas. Construído sobre o protocolo SignalR, oferece mensagens eficientes e de baixa latência com mecanismos automáticos de reconexão e fallback.
Casos de uso
Aplicações de bate-papo em tempo real
painéis de dados ao vivo
Ferramentas de edição colaborativa
monitoramento de dispositivos IoT
Notificações push
Principais recursos
Comunicação bidirecional
Reconexão automática
Suporte multiplataforma
invocação de método do servidor
tratamento de eventos do cliente
Indicado para
desenvolvedores de aplicativos em tempo real
Projetos Flutter integrados ao backend
Aplicações que exigem atualizações em tempo real
Equipes usando o ASP.NET Core SignalR
Necessidades de comunicação de baixa latência
Considerações
Requer um servidor SignalR compatível com o ASP.NET Core
A estabilidade da rede afeta o desempenho
Configuração de autenticação necessária para hubs seguros
Documentação limitada em comparação com bibliotecas nativas
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
signalr_client
A Flutter SignalR Client for ASP.NET Core.
ASP.NET Core SignalR is an open-source library that simplifies adding real-time web functionality to apps. Real-time web functionality enables server-side code to push content to clients instantly.
Tested with ASP.NET Core 3.1 & ASP .NET Core 6
The client is able to invoke server side hub functions (including streaming functions) and to receive method invocations issued by the server. It also supports the auto-reconnect feature.
The client supports the following transport protocols:
Important Note: if you are experiencing issues (for example not receiving message callback) with the latest version, please give a try to older version as signalr_netcore: 0.1.7+2-nullsafety.3 but bear in mind that this version does not support auto reconnect functionalities and need to be handled manually.
Usage
Let's demo some basic usages:
1. Create a hub connection:
// Import the library.import'package:signalr_netcore/signalr_client.dart';
// The location of the SignalR Server.final serverUrl = "192.168.10.50:51001";
// Creates the connection by using the HubConnectionBuilder.final hubConnection = HubConnectionBuilder().withUrl(serverUrl).build();
// When the connection is closed, print out a message to the console.final hubConnection.onclose( (error) => print("Connection Closed"));
// Import theses libraries.import'package:logging/logging.dart';
import'package:signalr_netcore/signalr_client.dart';
// Configer the loggingLogger.root.level = Level.ALL;
// Writes the log messages to the consoleLogger.root.onRecord.listen((LogRecord rec) {
print('${rec.level.name}: ${rec.time}: ${rec.message}');
});
// If you want only to log out the message for the higer level hub protocol:final hubProtLogger = Logger("SignalR - hub");
// If youn want to also to log out transport messages:final transportProtLogger = Logger("SignalR - transport");
// The location of the SignalR Server.final serverUrl = "192.168.10.50:51001";
final connectionOptions = HttpConnectionOptionsfinal httpOptions = newHttpConnectionOptions(logger: transportProtLogger);
//final httpOptions = new HttpConnectionOptions(logger: transportProtLogger, transport: HttpTransportType.WebSockets); // default transport type.//final httpOptions = new HttpConnectionOptions(logger: transportProtLogger, transport: HttpTransportType.ServerSentEvents);//final httpOptions = new HttpConnectionOptions(logger: transportProtLogger, transport: HttpTransportType.LongPolling);// If you need to authorize the Hub connection than provide a an async callback function that returns // the token string (see AccessTokenFactory typdef) and assigned it to the accessTokenFactory parameter:// final httpOptions = new HttpConnectionOptions( .... accessTokenFactory: () async => await getAccessToken() ); // Creates the connection by using the HubConnectionBuilder.final hubConnection = HubConnectionBuilder().withUrl(serverUrl, options: httpOptions).configureLogging(hubProtLogger).build();
// When the connection is closed, print out a message to the console.final hubConnection.onclose( (error) => print("Connection Closed"));
2. Connect to a Hub:
Calling following method starts handshaking and connects the client to SignalR server
final result = await hubConnection.invoke("MethodOneSimpleParameterSimpleReturnValue", args: <Object>["ParameterValue"]);
logger.log(LogLevel.Information, "Result: '$result");
4. Calling a client function:
Assuming the server calls a function "aClientProvidedFunction":
hubConnection.on("aClientProvidedFunction", _handleAClientProvidedFunction);
// To unregister the function use:// a) to unregister a specific implementation:// hubConnection.off("aClientProvidedFunction", method: _handleServerInvokeMethodNoParametersNoReturnValue);// b) to unregister all implementations:// hubConnection.off("aClientProvidedFunction");
...
void_handleAClientProvidedFunction(List<Object> parameters) {
logger.log(LogLevel.Information, "Server invoked the method");
}
5. Using Msgpack for serialization
The Hub should be configured to use the msgpack protocol in both the client and server
Client
import'package:signalr_netcore/msgpack_hub_protocol.dart';
_hubConnection = HubConnectionBuilder()
.withUrl(_serverUrl, options: httpOptions)
/* Configure the Hub with msgpack protocol */
.withHubProtocol(MessagePackHubProtocol())
.withAutomaticReconnect()
.configureLogging(logger)
.build();
Server
Add the following packge to your ASP NET core project
Microsoft.AspNetCore.SignalR.Protocols.MessagePack
public void ConfigureServices(IServiceCollection services)
{
// Configure the hub to use msgpack protocol
services.AddSignalR().AddMessagePackProtocol();
}
A note about the parameter types
All function parameters and return values are serialized/deserialized into/from JSON by using the dart:convert package (json.endcode/json.decode). Make sure that you:
use only simple parameter types
or
use objects that implements toJson() since that method is used by the dart:convert package to serialize an object.