serveur_websocket
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
serveur_websocket [2019/06/20 13:07] – Mushussu | serveur_websocket [2020/07/22 14:17] – ancienne révision (2020/03/27 18:10) restaurée Mushussu | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== | + | ====== |
Un tutoriel permettant de débuter avec la librairie LibWebSocket a été rédigé en anglais à cette [[https:// | Un tutoriel permettant de débuter avec la librairie LibWebSocket a été rédigé en anglais à cette [[https:// | ||
- | Il paraissait répondre aux attentes des débutants, mais certaine partie | + | Il paraissait répondre aux attentes des débutants, mais certaines parties |
Voici donc une réactualisation du tutoriel. | Voici donc une réactualisation du tutoriel. | ||
Matériel : | Matériel : | ||
- | * Liste à puceRaspberry | + | * Raspberry |
* Carte SD 16 Go | * Carte SD 16 Go | ||
==== Installation de LibWebSockets ==== | ==== Installation de LibWebSockets ==== | ||
+ | === Configuration === | ||
Installer la version Raspbian Stretch Lite 2019-04-08 | Installer la version Raspbian Stretch Lite 2019-04-08 | ||
Ligne 16: | Ligne 17: | ||
sudo raspi-config | sudo raspi-config | ||
Aller dans - 2 Network Options - puis - N1 Hostname - puis changer le nom en : serveurwebsocket | Aller dans - 2 Network Options - puis - N1 Hostname - puis changer le nom en : serveurwebsocket | ||
- | Valider, puis aller dans - 4 Localisation Options - puis dans - I2 Change Timezone - et choisissez | + | |
+ | Valider, puis aller dans - 4 Localisation Options - puis dans - I2 Change Timezone - et choisisse | ||
Aller sur Finish puis yes pour redémarrer. | Aller sur Finish puis yes pour redémarrer. | ||
+ | |||
+ | === Installation des librairies complémentaires === | ||
sudo apt-get install cmake | sudo apt-get install cmake | ||
sudo apt-get install git-core | sudo apt-get install git-core | ||
sudo apt-get install libssl-dev | sudo apt-get install libssl-dev | ||
+ | sudo apt-get install zlib1g-dev | ||
+ | | ||
+ | === LibWebsockets === | ||
git clone https:// | git clone https:// | ||
cd libwebsockets | cd libwebsockets | ||
+ | git checkout v3.2-stable | ||
mkdir build | mkdir build | ||
cd build | cd build | ||
- | cmake .. -DLWS_IPV6=OFF | + | cmake .. -DLWS_IPV6=OFF -DLWS_MAX_SMP=8 -DLWS_WITHOUT_EXTENSIONS=OFF |
make | make | ||
sudo make install | sudo make install | ||
cd | cd | ||
+ | sudo ldconfig | ||
Pour verifier que tout fonctionne bien | Pour verifier que tout fonctionne bien | ||
libwebsockets-test-server | libwebsockets-test-server | ||
Taper dans votre navigateur préféré : | Taper dans votre navigateur préféré : | ||
- | http://serveurwebsocket:7681/ | + | http://127.0.0.1:7681/ |
Si le compteur démarre, alors la librairie est bien installée. | Si le compteur démarre, alors la librairie est bien installée. | ||
- | ==== Serveur Minitel ==== | ||
- | sudo nano serveurWebsocket.c | + | Voici le code mis à jour : |
- | Copier | + | |
<code c> | <code c> | ||
- | // gcc -Wall serveurWebsocket.c -o serveurWebsocket | + | // gcc -Wall testServeur.c -o testServeur |
- | + | ||
#include < | #include < | ||
#include < | #include < | ||
#include < | #include < | ||
- | + | ||
static int | static int | ||
lws_callback_http( | lws_callback_http( | ||
- | + | | |
- | | + | struct lws *wsi, |
- | | + | enum lws_callback_reasons reason, |
- | | + | void *user, |
- | | + | void *in, |
- | | + | size_t len |
- | | + | ) { |
switch (reason) { | switch (reason) { | ||
case LWS_CALLBACK_ESTABLISHED: | case LWS_CALLBACK_ESTABLISHED: | ||
Ligne 68: | Ligne 77: | ||
((char *) in)[i]; | ((char *) in)[i]; | ||
} | } | ||
- | + | | |
printf(" | printf(" | ||
(int) len, buf + LWS_SEND_BUFFER_PRE_PADDING); | (int) len, buf + LWS_SEND_BUFFER_PRE_PADDING); | ||
- | + | | |
lws_write(wsi, | lws_write(wsi, | ||
- | len, LWS_WRITE_TEXT); | + | |
free(buf); | free(buf); | ||
break; | break; | ||
Ligne 80: | Ligne 89: | ||
break; | break; | ||
} | } | ||
- | + | | |
return 0; | return 0; | ||
} | } | ||
- | + | ||
static struct lws_protocols protocols[] = { | static struct lws_protocols protocols[] = { | ||
{ | { | ||
Ligne 94: | Ligne 103: | ||
} | } | ||
}; | }; | ||
- | + | ||
static const struct lws_extension exts[] = { | static const struct lws_extension exts[] = { | ||
{ | { | ||
Ligne 103: | Ligne 112: | ||
{ NULL, NULL, NULL /* terminator */ } | { NULL, NULL, NULL /* terminator */ } | ||
}; | }; | ||
- | + | ||
int main(void) { | int main(void) { | ||
int port = 9000; | int port = 9000; | ||
Ligne 109: | Ligne 118: | ||
struct lws_context *context; | struct lws_context *context; | ||
int opts = 0; | int opts = 0; | ||
- | + | | |
// create libwebsocket context representing this server | // create libwebsocket context representing this server | ||
struct lws_context_creation_info info; | struct lws_context_creation_info info; | ||
- | + | | |
memset(& | memset(& | ||
info.port = port; | info.port = port; | ||
Ligne 128: | Ligne 137: | ||
info.uid = -1; | info.uid = -1; | ||
info.options = opts; | info.options = opts; | ||
- | + | | |
context = lws_create_context(& | context = lws_create_context(& | ||
- | + | | |
if (context == NULL) { | if (context == NULL) { | ||
fprintf(stderr, | fprintf(stderr, | ||
return -1; | return -1; | ||
} | } | ||
- | + | | |
printf(" | printf(" | ||
while (1) { | while (1) { | ||
lws_service(context, | lws_service(context, | ||
} | } | ||
- | + | | |
lws_context_destroy(context); | lws_context_destroy(context); | ||
- | + | | |
return 0; | return 0; | ||
} | } | ||
+ | |||
</ | </ | ||
- | Ctrl + o pour enregistrer et Ctrl + x pour sortir de nano | ||
- | Compiler le tout : | + | Compilation |
- | gcc -Wall serveurWebsocket.c -o serveurWebsocket | + | gcc -Wall testServeur.c -o testServeur |
+ | Execution : | ||
+ | ./ | ||
+ | |||
+ | Créer le fichier index.html avec le contenu suivant : | ||
+ | <code html> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta charset=" | ||
+ | <script src=" | ||
+ | </ | ||
+ | <script type=" | ||
+ | $(function() { | ||
+ | window.WebSocket = window.WebSocket || window.MozWebSocket; | ||
+ | var websocket = new WebSocket( | ||
+ | ' | ||
+ | websocket.onopen = function () { | ||
+ | $(' | ||
+ | }; | ||
+ | websocket.onerror = function () { | ||
+ | $(' | ||
+ | }; | ||
+ | websocket.onmessage = function (message) { | ||
+ | console.log(message.data); | ||
+ | $(' | ||
+ | }; | ||
+ | $(' | ||
+ | e.preventDefault(); | ||
+ | websocket.send($(' | ||
+ | $(' | ||
+ | }); | ||
+ | }); | ||
+ | </ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <input type=" | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
- | sudo ldconfig | + | L' |
- | | + | |
- | | + | WebSockets test doit être inscrit en vert ce qui signifie que la connection WebSocket fonctionne bien. |
+ | |||
+ | Amusez-vous ! | ||
+ | {{tag> |
serveur_websocket.txt · Dernière modification : 2020/07/22 14:19 de Mushussu