Comment implémenter WebSocket en C (Guide du débutant)

Explorer les bases de WebSocket en C et des exemples pour envoyer facilement avec Apidog.

Louis Dupont

Louis Dupont

5 June 2025

Comment implémenter WebSocket en C (Guide du débutant)

WebSocket est un protocole de communication puissant utilisé pour l'échange de données bidirectionnel en temps réel entre un client et un serveur. Sa capacité à établir et à maintenir une connexion de longue durée le rend idéal pour les applications nécessitant des mises à jour de données instantanées. Si vous êtes intéressé par l'implémentation de WebSocket en langage C, cet article vous fournira un guide concis pour commencer.

Installation de libwebsockets

Actuellement, Tornado est une bibliothèque populaire pour l'implémentation de WebSocket en Python. Cependant, libwebsockets est une bibliothèque WebSocket multiplateforme flexible et facile à utiliser, écrite en langage C.

libwebsockets est une bibliothèque WebSocket multiplateforme écrite en C, qui permet la création de serveurs et de clients liés au protocole WebSocket. C'est une bibliothèque flexible et conviviale qui permet le développement rapide d'applications WebSocket hautes performances. Grâce à sa conception simple et légère, elle est particulièrement adaptée à la création d'applications sur des systèmes embarqués ou des applications serveur à forte charge gérant un grand nombre de connexions.

C

Vous pouvez installer libwebsockets comme ceci :

git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
mkdir build
cd build
cmake ..
make && sudo make install
pkg-config --modversion libwebsockets

Ajout de libwebsockets.h

#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

Écriture du code logique

#include <libwebsockets.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// Structure pour stocker les données de chaque session WebSocket
struct per_session_data {
};

// Fonction de rappel pour les messages du serveur WebSocket
int callback(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) {
    switch (reason) {
        case LWS_CALLBACK_ESTABLISHED: // Gérer le nouvel événement de connexion
            // Ajouter une minuterie pour envoyer un horodatage toutes les secondes
            lws_callback_on_writable(wsi);
            break;
        case LWS_CALLBACK_SERVER_WRITEABLE: // Gérer l'événement d'envoi de données
            // Envoyer l'horodatage
            time_t t = time(NULL);
            char timestamp[20];
            sprintf(timestamp, "%ld", t);
            lws_write(wsi, timestamp, strlen(timestamp), LWS_WRITE_TEXT);
            lws_callback_on_writable(wsi);
            break;
        // Autres événements omis
    }
    return 0;
}

int main(int argc, char **argv) {
    // Créer le protocole WebSocket
    static struct lws_protocols protocols[] = {
        {
            "demo-protocol", // Nom du protocole, doit correspondre au protocole WebSocket dans le code frontend
            callback, // Pointeur de fonction de rappel
            sizeof(struct per_session_data), // Taille des données pour chaque session (connexion)
            0, // Pas de paramètres de protocole supplémentaires
            NULL, NULL, NULL
        },
        { NULL, NULL, 0, 0 } // La liste des protocoles se termine par NULL
    };

    // Créer le contexte WebSocket
    struct lws_context_creation_info info = {
        .port = 3001, // Numéro de port d'écoute
        .protocols = protocols // Liste des protocoles
    };
    struct lws_context *context = lws_create_context(&info);

    // Vérifier si la création du contexte WebSocket a réussi
    if (!context) {
        printf("Échec de la création du contexte WebSocket.\n");
        return -1;
    }

    // Entrer dans la boucle et attendre les connexions WebSocket
    while (1) {
        lws_service(context, 50);
    }

    // Nettoyer et fermer le contexte WebSocket
    lws_context_destroy(context);

    return 0;
}

La page frontale Connecter WebSocket

Écriture de la page

Vous devez créer un index.html et remplir le code ci-dessous :

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    window.onload = () => {
        if ('WebSocket' in window) {
            // Créer une connexion WebSocket
            let ws = new WebSocket('ws://127.0.0.1:3001/websocket');
            // Envoyer un message lorsque la connexion est établie avec succès et que le serveur peut commencer à envoyer des données
            ws.onopen = () => {
                console.log('websocket success---');
                ws.send('success');
            }
            ws.onmessage = (message) => {
                let data = message.data;
                console.log('get websocket message---', data);
            }
            ws.onerror = () => {
                console.error('websocket fail');
            }
        } else {
            console.error('dont support websocket');
        };
    };
</script>

</head>
<body>
  
</body>
</html>

Exécution de la page

Cliquez avec le bouton droit sur index.html et ouvrez ce fichier :

Afficher les résultats

Vous pouvez voir que le back-end reçoit d'abord le message "open success" du front-end et que la construction ouverte réussit.

Ensuite, une fois la connexion établie, le back-end a sorti des informations pour le front-end.

Comment envoyer WebSocket avec Apidog

Maintenant que nous avons couvert l'implémentation de WebSocket en langage C, explorons comment envoyer des requêtes WebSocket à l'aide d'Apidog. Alors que la section précédente se concentrait sur les principes fondamentaux et les techniques de la programmation WebSocket en C, Apidog offre un moyen pratique d'interagir avec les API WebSocket grâce à son interface conviviale.

Étape 1. Création d'une requête WebSocket

Create WebSocket Request

Étape 2. Envoyer un message

Dans Message, vous pouvez remplir le message à envoyer au serveur, après l'avoir envoyé, le serveur recevra le message que vous envoyez.

Send a Message

Remarque : Assurez-vous que le serveur WebSocket est en cours d'exécution et accessible pour une communication réussie avec Apidog.

Étape 3. Enregistrement de la requête

Lorsque vous avez terminé d'écrire, vous pouvez cliquer sur Enregistrer pour enregistrer la requête, qui est réutilisée rapidement la prochaine fois.

Save Request

Étape 4. Connexion à un serveur WebSocket

Tout d'abord, cliquez sur le bouton Connecter pour établir une connexion WebSocket.

Connecting to a service

Après une connexion réussie, Apidog affiche un message de réussite. Le côté serveur répondra également car la connexion a réussi.

a successful connection

Étape 5. Envoi d'une requête WebSocket

Nous pouvons ensuite communiquer avec le serveur via WebSocket. Vous pouvez utiliser Apidog pour envoyer Message et Params au serveur en cliquant sur le bouton Envoyer.

img

Vous pouvez cliquer sur le bouton Déconnecter si vous ne souhaitez plus être connecté.

img

Remarque :

Apidog possède à la fois un côté web et un côté client. Si vous utilisez le côté web et souhaitez déboguer des services locaux, vous devez installer le plugin Google pour Apidog.

Télécharger ici : Apidog Browser Extension

Conclusion

En conclusion, l'implémentation de WebSocket en langage C implique l'installation de la bibliothèque "libwebsockets", l'inclusion du fichier d'en-tête nécessaire et l'écriture du code logique. De plus, vous pouvez utiliser des outils comme Apidog pour envoyer des requêtes WebSocket et tester vos fonctionnalités WebSocket.

Explore more

Comment utiliser Deepseek R1 en local avec Cursor

Comment utiliser Deepseek R1 en local avec Cursor

Apprenez à configurer DeepSeek R1 local avec Cursor IDE pour une aide au codage IA privée et économique.

4 June 2025

Comment exécuter Gemma 3n sur Android ?

Comment exécuter Gemma 3n sur Android ?

Apprenez à installer et exécuter Gemma 3n sur Android via Google AI Edge Gallery.

3 June 2025

Comment utiliser Claude Code avec GitHub Actions

Comment utiliser Claude Code avec GitHub Actions

Découvrez Claude Code avec GitHub Actions : revues de code, corrections de bugs, implémentation de fonctionnalités. Tutoriel pour développeurs.

29 May 2025

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API