Outils pour utilisateurs

Outils du site


serveur_websocket

Ceci est une ancienne révision du document !


Réactualisation de la page : https://medium.com/@martin.sikora/libwebsockets-simple-websocket-server-68195343d64b

Matériel : Raspberry 3 modèle B+ Carte SD 16 Go

Installation de LibWebSockets

Installer la version Raspbian Stretch Lite 2019-04-08

Changer le nom en ServeurWebsocket

sudo apt-get install cmake
sudo apt-get install git-core
sudo apt-get install libssl-dev
git clone https://github.com/warmcat/libwebsockets
cd libwebsockets
mkdir build
cd build
cmake .. -DLWS_IPV6=OFF
make
sudo make install
cd
sudo nano serveurWebsocket.c

Copier le code ci-dessous :

// gcc -Wall serveurWebsocket.c -o serveurWebsocket -Llibwebsockets/build/lib -lwebsockets
 
#include <stdio.h>
#include <stdlib.h>
#include <libwebsockets.h>
 
static int
lws_callback_http(
 
                         struct lws *wsi,
                         enum lws_callback_reasons reason,
                         void *user,
                         void *in,
                         size_t len
                         ) {
    switch (reason) {
        case LWS_CALLBACK_ESTABLISHED:
            printf("connection established\n");
            break;
        case LWS_CALLBACK_RECEIVE: {
            unsigned char *buf = (unsigned char*)
            malloc(LWS_SEND_BUFFER_PRE_PADDING + len
                   + LWS_SEND_BUFFER_POST_PADDING);
            int i;
            for (i=0; i < len; i++) {
                buf[LWS_SEND_BUFFER_PRE_PADDING + (len - 1) - i ] =
                ((char *) in)[i];
            }
 
            printf("received data: %s, replying: %.*s\n", (char *) in,
                   (int) len, buf + LWS_SEND_BUFFER_PRE_PADDING);
 
            lws_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING],
                               len, LWS_WRITE_TEXT);
            free(buf);
            break;
        }
        default:
            break;
    }
 
    return 0;
}
 
static struct lws_protocols protocols[] = {
    {
        "http-only",   // name
        lws_callback_http, // callback
        0              // per_session_data_size
    },
    {
        NULL, NULL, 0   /* End of list */
    }
};
 
static const struct lws_extension exts[] = {
    {
        "permessage-deflate",
        lws_extension_callback_pm_deflate,
        "permessage-deflate"
    },
    { NULL, NULL, NULL /* terminator */ }
};
 
int main(void) {
    int port = 9000;
    const char *interface = NULL;
    struct lws_context *context;
    int opts = 0;
 
    // create libwebsocket context representing this server
    struct lws_context_creation_info info;
 
    memset(&info, 0, sizeof info);
    info.port = port;
    info.iface = interface;
    info.protocols = protocols;
    info.extensions = exts;
    //if (!use_ssl) {
    info.ssl_cert_filepath = NULL;
    info.ssl_private_key_filepath = NULL;
    //} else {
    //  info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
    //  info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
    //}
    info.gid = -1;
    info.uid = -1;
    info.options = opts;
 
    context = lws_create_context(&info);
 
    if (context == NULL) {
        fprintf(stderr, "libwebsocket init failed\n");
        return -1;
    }
 
    printf("starting server...\n");
    while (1) {
        lws_service(context, 50);
    }
 
    lws_context_destroy(context);
 
    return 0;
}

Ctrl + o pour enregistrer et Ctrl + x pour sortir de nano

serveur_websocket.1561024824.txt.gz · Dernière modification : 2019/06/20 10:00 de Mushussu