Ereignisgesteuertes .NET:Verwenden eines SSE-Endpunkts mit HttpClient

 C Programming >> C-Programmierung >  >> Tags >> .NET
Ereignisgesteuertes .NET:Verwenden eines SSE-Endpunkts mit HttpClient

Server-Sent Events (SSE) ermöglichen es einem Client, Nachrichten vom Server zu abonnieren. Es erstellt einen unidirektionalen Stream vom Server zum Client. Wenn der Server neue Nachrichten für den Client hat, schreibt er sie in den Stream. Dies ist eine Alternative dazu, dass der Client den Server nach Updates abfragt.

Verwenden Sie Folgendes, um einen SSE-Endpunkt mit HttpClient zu nutzen:

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)

Sehen Sie sich die Beispiel-Konsolen-App unten an, um zu sehen, wie dies im Kontext verwendet wird.

Beispiel – Einfache SSE-Client-Konsolen-App

Wenn ich einen SSE-Endpunkt entwickle, verwende ich gerne die folgende einfache Konsolen-App, um den Endpunkt zu nutzen.

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)

Die Konsolen-App ausführen

Die Konsolen-App wird den ganzen Tag ausgeführt. Wenn ein Fehler auftritt, versucht es es einfach in 5 Sekunden erneut.

Im folgenden Beispiel hatte ich den SSE-Endpunkt zunächst nicht ausgeführt, weshalb er einen Verbindungsfehler erhält. Dann habe ich es gestartet und der Client hat mehrere Updates erhalten. Dann habe ich den SSE-Endpunkt gestoppt, weshalb er eine Fehlermeldung über das Schließen der Verbindung erhält. Dann habe ich es neu gestartet und es fing wieder an, Updates zu erhalten.