.NET basado en eventos:cómo consumir un punto final de SSE con HttpClient

 C Programming >> Programación C >  >> Tags >> .NET
.NET basado en eventos:cómo consumir un punto final de SSE con HttpClient

Los eventos enviados por el servidor (SSE) permiten que un cliente se suscriba a los mensajes del servidor. Crea un flujo unidireccional desde el servidor al cliente. Cuando el servidor tiene nuevos mensajes para el cliente, los escribe en el flujo. Esta es una alternativa al cliente que sondea el servidor en busca de actualizaciones.

Use lo siguiente para consumir un punto final de SSE con HttpClient:

using (var streamReader = new StreamReader(await httpClient.GetStreamAsync(url)))
{
	while (!streamReader.EndOfStream)
	{
		var message = await streamReader.ReadLineAsync();
		Console.WriteLine($"Received message: {message}");
	}
}
Code language: C# (cs)

Eche un vistazo a la aplicación de consola de ejemplo a continuación para ver cómo se usa en contexto.

Ejemplo:aplicación de consola de cliente SSE simple

Cuando estoy desarrollando un punto final de SSE, me gusta usar la siguiente aplicación de consola simple para consumir el punto final.

static async Task Main(string[] args)
{
	HttpClient client = new HttpClient();
	client.Timeout = TimeSpan.FromSeconds(5);
	string stockSymbol = "VTSAX";
	string url = $"http://localhost:9000/stockpriceupdates/{stockSymbol}";

	while (true)
	{
		try
		{
			Console.WriteLine("Establishing connection");
			using (var streamReader = new StreamReader(await client.GetStreamAsync(url)))
			{
				while (!streamReader.EndOfStream)
				{
					var message = await streamReader.ReadLineAsync();
					Console.WriteLine($"Received price update: {message}");
				}
			}
		}
		catch(Exception ex)
		{
			//Here you can check for 
			//specific types of errors before continuing
			//Since this is a simple example, i'm always going to retry
			Console.WriteLine($"Error: {ex.Message}");
			Console.WriteLine("Retrying in 5 seconds");
			await Task.Delay(TimeSpan.FromSeconds(5));
		}
	}
}
Code language: C# (cs)

Ejecutar la aplicación de consola

La aplicación de la consola seguirá funcionando todo el día. Cuando hay un error, simplemente vuelve a intentarlo en 5 segundos.

En el siguiente ejemplo, al principio no tenía el extremo de SSE ejecutándose, por lo que aparece un error de conexión. Luego lo puse en marcha y el cliente recibió múltiples actualizaciones. Luego detuve el punto final de SSE, por lo que aparece un error sobre el cierre de la conexión. Luego lo reinicié y comenzó a recibir actualizaciones nuevamente.