Un simple WebSocket
client pour Dart qui inclut une logique de reconnexion automatique.
DĂ©marrage rapide đ
// Create a WebSocket client.
final socket = WebSocket(Uri.parse('ws://localhost:8080'));
// Listen to messages from the server.
socket.messages.listen((message) {
// Handle incoming messages.
});
// Send a message to the server.
socket.send('ping');
// Close the connection.
socket.close();
Ătablir une connexion đ
La WebSocket
client tentera d’Ă©tablir une connexion immĂ©diatement aprĂšs l’initialisation. Par dĂ©faut, un dĂ©lai d’attente se produira si l’Ă©tablissement d’une connexion dĂ©passe 60 secondes mais un timeout
la durĂ©e peut ĂȘtre indiquĂ©e :
final uri = Uri.parse('ws://localhost:8080');
// Trigger a timeout if establishing a connection exceeds 10s.
final timeout = Duration(seconds: 10);
final socket = WebSocket(uri, timeout: timeout);
Reconnexion đ
Si la WebSocket
client n’est pas en mesure d’Ă©tablir une connexion, il tentera automatiquement de se reconnecter en utilisant le Backoff
stratégie. Par défaut, un BinaryExponentialBackoff
est utilisé mais une coutume backoff
peut ĂȘtre fourni.
Il existe trois stratĂ©gies d’interruption intĂ©grĂ©es, mais une stratĂ©gie d’interruption personnalisĂ©e peut ĂȘtre Ă©crite en implĂ©mentant le Backoff
interface.
ConstantBackoff
Cette stratégie de retrait rendra le WebSocket
le client attend un laps de temps constant entre les tentatives de reconnexion.
// Wait a constant 1s between reconnection attempts.
// [1, 1, 1, ...]
const backoff = ConstantBackoff(Duration(seconds: 1));
final socket = WebSocket(uri, backoff: backoff);
Interruption linéaire
Cette stratégie de retrait rendra le WebSocket
le client attend un temps croissant de maniĂšre linĂ©aire jusqu’Ă ce qu’une durĂ©e maximale facultative soit atteinte.
// Initially wait 0s and increase the wait time by 1s until a maximum of 5s is reached.
// [0, 1, 2, 3, 4, 5, 5, 5, ...]
const backoff = LinearBackoff(
initial: Duration(seconds: ),
increment: Duration(seconds: 1),
maximum: Duration(seconds: 5),
);
final socket = WebSocket(uri, backoff: backoff);
BinaryExponentialBackoff
Cette stratégie de retrait rendra le WebSocket
le client attend un temps de plus en plus exponentiel jusqu’Ă ce qu’une Ă©tape maximale soit atteinte.
// Initially wait 1s and double the wait time until a maximum step of of 3 is reached.
// [1, 2, 4, 4, 4, ...]
const backoff = BinaryExponentialBackoff(
initial: Duration(seconds: 1),
maximumStep: 3
);
final socket = WebSocket(uri, backoff: backoff);
Surveillance de la connexion âĄïž
La WebSocket
le client expose un connection
objet qui peut ĂȘtre utilisĂ© pour interroger l’Ă©tat de la connexion Ă un moment donnĂ© ainsi que pour Ă©couter les changements en temps rĂ©el de l’Ă©tat de la connexion.
final uri = Uri.parse('ws://localhost:8080');
final socket = WebSocket(uri);
// Listen to changes in the connection state.
socket.connection.listen((state) {
// Handle changes in the connection state.
});
// Query the current connection state.
final connectionState = socket.connection.state;
L’Ă©tat de la connexion peut ĂȘtre l’un des suivants :
- de liaison: la connexion n’a pas encore Ă©tĂ© Ă©tablie.
- lié: la connexion est établie et la communication est possible.
- se reconnecter: la connexion a été perdue et est en cours de rétablissement.
- reconnecté: la connexion a été perdue et a été rétablie.
- déconnexion: la connexion passe par la poignée de main de fermeture ou la
close
mĂ©thode a Ă©tĂ© invoquĂ©e. - dĂ©branchĂ©: la connexion WebSocket a Ă©tĂ© fermĂ©e ou n’a pas pu ĂȘtre Ă©tablie.
* L’Ă©tat de connexion dĂ©connectĂ© contient des champs nullables pour le code de fermeture, le motif de fermeture, l’erreur et la trace de la pile.
Envoi de messages đ€
Une fois par WebSocket
connexion a Ă©tĂ© Ă©tablie, des messages peuvent ĂȘtre envoyĂ©s au serveur via send
:
final socket = WebSocket(Uri.parse('ws://localhost:8080'));
// Wait until a connection has been established.
await socket.connection.firstWhere((state) => state is Connected);
// Send a message to the server.
socket.send('ping');
RĂ©ception de messages đ„
Ăcoutez les messages entrants du serveur via le messages
flux:
final socket = WebSocket(Uri.parse('ws://localhost:8080'));
// Listen for incoming messages.
socket.message.listen((message) {
// Handle the incoming message.
});
Fermeture de la connexion đ«
Une fois par WebSocket
connexion est établie, il tentera automatiquement de se reconnecter si la connexion est interrompue. Appel close()
mettra Ă jour l’Ă©tat de la connexion Ă disconnecting
effectuez la poignĂ©e de main de fermeture et dĂ©finissez l’Ă©tat sur disconnected
. Ă ce stade, le WebSocket
le client ne tentera pas de se reconnecter et un nouveau WebSocket
Une instance client devra ĂȘtre créée afin d’Ă©tablir une nouvelle connexion.
final socket = WebSocket(Uri.parse('ws://localhost:8080'));
// Later, close the connection with an optional code and reason.
socket.close(1000, 'CLOSE_NORMAL');
GitHub
Voir Github