Aller au contenu principal

Configurer une connexion WebSocket

avertissement

Si vous n'êtes pas familier avec les WebSockets, veuillez consulter notre documentation.

Configurer une connexion WebSocket

Ensuite, nous allons créer une connexion WebSocket au serveur WebSocket de Deriv comme indiqué ci-dessous :

index.js
const app_id = 1089; // Remplacez par votre app_id ou laissez 1089 pour les tests.
const websocket = new WebSocket(`wss://ws.derivws.com/websockets/v3?app_id=${app_id}`);
infos

app_id = 1089 est juste à des fins de test. Veuillez mettre cela à jour avec votre propre app_id lorsque vous publiez votre application dans un environnement de production. Veuillez consulter ce guide pour créer une nouvelle application pour vous-même.

À ce stade, nous sommes connectés au WebSocket server. Mais nous ne recevons aucune donnée. Pour envoyer ou recevoir des données, nous devons nous abonner aux websocket events.

En général, nous avons 4 événements sur les WebSocket connections :

  • close : Déclenché lorsqu'une connexion avec une WebSocket est fermée. Également disponible au moyen de la propriété onclose.
  • open : Déclenché lorsqu'une connexion avec une WebSocket est ouverte. Également disponible au moyen de la propriété onopen.
  • message : Déclenché lorsque des données sont reçues par l'intermédiaire d'une WebSocket. Également disponible au moyen de la propriété onmessage.
  • error : Déclenché lorsqu'une connexion avec une WebSocket a été fermée en raison d'une erreur, par exemple lorsque des données n'ont pas pu être envoyées. Également disponible au moyen de la propriété onerror.

Ajoutons un écouteur d'événements pour ces événements sur notre connexion WebSocket.

index.js
// s'abonner à l'événement `open`
websocket.addEventListener('open', (event) => {
console.log('connexion websocket établie: ', event);
});

// s'abonner à l'événement `message`
websocket.addEventListener('message', (event) => {
console.log('nouveau message reçu du serveur: ', event);
});

// s'abonner à l'événement `close`
websocket.addEventListener('close', (event) => {
console.log('connexion websocket fermée: ', event);
});

// s'abonner à l'événement `error`
websocket.addEventListener('error', (event) => {
console.log('une erreur est survenue dans notre connexion websocket', event);
});

Maintenant, ouvrez le fichier index.html dans notre navigateur et vérifiez votre console de développement. Vous ne devriez voir que le journal pour connexion websocket établie.

Envoyer et recevoir des données

Notre serveur WebSocket offre la fonctionnalité ping/pong. Utilisons cela dans notre projet démo pour envoyer et recevoir des données. Utilisons cela dans notre projet démo pour envoyer et recevoir des données. Modifiez les récepteurs d'événements pour open et message comme suit :

avertissement

La fonction send de la connexion WebSocket ne reçoit que des string, ArrayBuffer, Blob, TypedArray et DataView. Pour en savoir plus, consultez le site MDN. Cela signifie que si nous voulons envoyer un objet, nous devons d'abord le filtrer avec JSON.stringify.

index.js
// s'abonner à l'événement `open`
websocket.addEventListener('open', (event) => {
console.log('connexion websocket établie: ', event);
const sendMessage = JSON.stringify({ ping: 1 });
websocket.send(sendMessage);
});

// s'abonner à l'événement `message`
websocket.addEventListener('message', (event) => {
const receivedMessage = JSON.parse(event.data);
console.log('nouveau message reçu du serveur: ', receivedMessage);
});

Le receivedMessage serait un objet comme celui-ci :

{
echo_req: {
ping: 1
},
msg_type: "ping",
ping: "pong"
}

Félicitations 🎉

Vous avez créé votre premier projet démo avec WebSockets.

conseil

La requête ping est principalement utilisée pour tester la connexion ou pour la maintenir en vie.

Garder la connexion WebSocket active

Par défaut, les connexions WebSocket seront fermées si aucun trafic n'est envoyé entre elles pendant environ 180 secondes. Une façon de maintenir la connexion en vie est d'envoyer des requêtes ping à des intervalles de 120 secondes. Cela permettra de garder la connexion active.

Voici un exemple de configuration simple :

index.js
const ping_interval = 12000; // c'est en millisecondes, ce qui équivaut à 120 secondes
let interval;
websocket.addEventListener('open', (event) => {
console.log('connexion websocket établie: ', event);
const sendMessage = JSON.stringify({ ping: 1 });
websocket.send(sendMessage);

// pour garder la connexion active
interval = setInterval(() => {
const sendMessage = JSON.stringify({ ping: 1 });
websocket.send(sendMessage);
}, ping_interval);
});

// subscribe to `close` event
websocket.addEventListener('close', (event) => {
console.log('connexion websocket fermée: ', event);
clearInterval(interval);
});

Maintenant, quand la connexion est établie, nous commençons à envoyer des requêtes ping avec des intervalles de 12000ms.

Votre code final devrait ressembler à ceci :

index.js
const app_id = 1089; // Remplacez par votre app_id ou laissez 1089 pour les tests.
const websocket = new WebSocket(`wss://ws.derivws.com/websockets/v3?app_id=${app_id}`);
const ping_interval = 12000; // c'est en millisecondes, ce qui équivaut à 120 secondes
let interval;

// s'abonner à l'événement `open`
websocket.addEventListener('open', (event) => {
console.log('connexion websocket établie: ', event);
const sendMessage = JSON.stringify({ ping: 1 });
websocket.send(sendMessage);

// pour garder la connexion active
interval = setInterval(() => {
const sendMessage = JSON.stringify({ ping: 1 });
websocket.send(sendMessage);
}, ping_interval);
});

// s'abonner à l'événement `message`
websocket.addEventListener('message', (event) => {
const receivedMessage = JSON.parse(event.data);
console.log('nouveau message reçu du serveur: ', receivedMessage);
});

// s'abonner à l'événement `close`
websocket.addEventListener('close', (event) => {
console.log('connexion websocket fermée: ', event);
clearInterval(interval);
});

// s'abonner à l'événement `error`
websocket.addEventListener('error', (event) => {
console.log('une erreur est survenue dans notre connexion websocket', event);
});