---
sidebar_position: 1
title: Websocket
---

Ce cours explique comment commencer avec les WebSockets dans ASP.NET Core. 
[WebSocket](https://wikipedia.org/wiki/WebSocket) ([RFC 6455](https://tools.ietf.org/html/rfc6455)) est un protocole qui autorise des canaux de communication persistants bidirectionnels sur les connexions TCP. 
Son utilisation profite aux applications qui tirent parti d’une communication rapide et en temps réel, par exemple les applications de conversation, de tableau de bord et de jeu.

Pour nos exemples nous allons utiliser un petit projet d'exemple disponible [ici](/DemoWebsocket.zip).

## Définition WebSocket

Dans le paradigme traditionnel du Web, le client était responsable de l'initiation de la communication avec un serveur, et le serveur ne pouvait pas renvoyer de données à moins qu'elles n'aient été préalablement demandées par le client. 
Avec WebSockets, vous pouvez envoyer des données entre le serveur et le client via une seule connexion TCP, et généralement les WebSockets sont utilisés pour fournir des fonctionnalités en temps réel aux applications modernes.

![Définition WebSocket](/img/websocket/sockets.png)

## Qu’est-ce qu’un SignalR Hub ?

L'API SignalR hubs vous permet d’appeler des méthodes sur des clients connectés à partir du serveur. 

* Dans le code serveur, vous définissez des méthodes qui sont appelées par le client. 
* Dans le code client, vous définissez des méthodes qui sont appelées à partir du serveur. 

SignalR s’occupe de tout en arrière-plan qui rend possible les communications de client à serveur et de serveur à client en temps réel.

## Installez le package client SignalR .NET

Le package `Microsoft.AspNetCore.SignalR.Client` est requis pour que les clients .NET se connectent aux hubs SignalR.

Installer le package `Microsoft.AspNetCore.SignalR.Client` dans sa dernière version.

![required library](/img/websocket/nuget-Microsoft.AspNetCore.SignalR.Client.png)

Ou en utilisant la console Package Manager : `PM> Install-Package Microsoft.AspNetCore.SignalR.Client`

## Utiliser SignalR

Pour établir une connexion, créez un `HubConnectionBuilder` et appelez la méthode `Build`. 
L'URL du concentrateur, le protocole, le type de transport, le niveau de journalisation, les en-têtes et d'autres options peuvent être configurés lors de la création d'une connexion. 
Configurez toutes les options requises en insérant l'une des méthodes `HubConnectionBuilder` dans la méthode `Build`. 

Démarrez la connexion avec `StartAsync`.

```csharp title="DemoSignalR.razor.cs"
public partial class DemoSignalR
{
	private HubConnection connection;

	private string connectionUrl = "https://localhost:44391/ChatHub";
	private List<Chat> logs = new List<Chat>();
	private string message = "";
	private string userName = "UserName";

	public DemoSignalR()
	{
		// Create the new SignalR Hub
		connection = new HubConnectionBuilder()
		   .WithUrl(connectionUrl)
		   .Build();
	}

	public void Dispose()
	{
		OnClose();
	}

	private async void OnClose()
	{
		// Send message for user disconnect
		await connection.InvokeAsync("SendMessage", new Chat { Type = "disconnect", Name = userName });

		// Stop the connection
		await connection.StopAsync();
	}

	private async void OnConnect()
	{
		// Handler to treat the receive message
		connection.On<Chat>("ReceiveMessage", chat =>
		{
			logs.Add(chat);
			StateHasChanged();
		});

		// Start the connection
		await connection.StartAsync();

		// Send message for user connect
		await connection.InvokeAsync("SendMessage", new Chat { Type = "connect", Name = userName });
	}

	private async Task SendMessageAsync()
	{
		// Send the user message
		await connection.InvokeAsync("SendMessage", new Chat { Type = "message", Name = userName, Message = message });
	}
}
```
