Optimisation pour les callbacks HTTP

Optimisation pour les callbacks HTTP

Il y a quelques semaines, nous avons publié une mise à jour de nos librairies qui réduisait la quantité de données transférées entre les modules Yoctopuce et l'API. Toutefois, cette optimisation n'était pas disponible pour les callbacks HTTP. Cette semaine, nous publions une nouvelle librairie PHP qui permet de profiter d'un gain similaire pour les callbacks HTTP.



Dans la dernière version de notre librairie PHP, nous avons introduit un cache spécifique pour le mode HTTP callback. Une fois activé, ce cache permet de réduire de 50% à 70% la quantité de données envoyées par les modules Yoctopuce. Ce gain est particulièrement intéressant si l'on utilise un YoctoHub-GSM, car en général les opérateurs monnaient à prix d'or le moindre bytes de données qui passe par leur réseau.

Pour profiter de ce nouveau cache, il faut utiliser un YoctoHub ou VirtualHub avec un firmware v27750 ou plus récent et la librairie PHP 1.10.27759 ou plus récent.

Ce nouveau cache est complètement rétro-compatible, c'est-à-dire que quelque soit la version de la librairie PHP du YoctoHub ou du VirtualHub utilisée, le callback HTTP fonctionnera. Cependant, le gain sera visible uniquement si les deux parties sont suffisamment récentes. Cela permet de mettre à jour la librairie PHP sur un serveur Web et de progressivement mettre à jour le firmware des YoctoHubs sans interruption de service.

Activer le cache


Pour pouvoir profiter du cache, il faut appeler la méthode YAPI::SetHTTPCallbackCacheDir() avant tout autre fonction de notre librairie. Cette fonction prend en paramètre le chemin d'accès d'un répertoire où seront stockées les données entre deux callbacks HTTP. Ce répertoire doit exister et le script PHP a besoin des droits d'écriture pour ce répertoire.

<?php
require_once('yocto_api.php');
// enable HTTP callback Cache
YAPI::SetHTTPCallbackCacheDir("../hidden/cache_dir");

$errmsg = "";
if(YAPI::RegisterHub('callback', $errmsg) != YAPI_SUCCESS) {
    print("Unable to start the API in callback mode ($errmsg)");
    die();
}
...



Il est recommandé d'utiliser un répertoire qui n'est pas public, car la librairie va y stocker des données provenant des modules Yoctopuce. Si vous utilisez un répertoire qui est accessible sur le site Web, quelqu'un d'un peu malin pourrait deviner le path et accéder à ces données.

Le fonctionnement du cache


Lors du premier callback, le YoctoHub envoie toutes les données au script PHP. Si le script PHP utilise le cache à l'aide de la méthode YAPI::SetHTTPCallbackCacheDir(), la librairie PHP va stocker dans le répertoire du cache les données reçues et répondre au YoctoHub qu'il n'a plus besoin de transmettre une partie des données lors des prochains callbacks.

Concrètement, les données sont envoyées au format JSON. Lors du premier callback, la structure JSON est envoyée en entier, mais lors des callbacks suivants, seules les valeurs sont transmises et les clefs de la structure sont remplacées par des index. Pour reconstruire la structure JSON complète, la librairie PHP fusionne les données reçues et les données stockées dans le cache. Cette optimisation permet en générale de réduire le trafique de 50% à 60% sans surcharger le CPU du YoctoHub.

Ce qu'il faut retenir, c'est que le premier callback d'un YoctoHub envoie toujours la totalité des données et seules les exécutions suivantes profitent de la "compression". Si le YoctoHub redémarre ou passe en mode sleep, il repasse en mode "non compressé" et envoie la structure JSON complète.


Le callback Yocto-API-JZON


Pour les scénarios où le YoctoHub passe en mode sleep entre chaque callback, par exemple lorsque nous avons suivi l'expédition d'un paquet, le cache ne serait jamais utilisé car le YoctoHub repasserait en mode standard à chaque réveil. Pour résoudre ce problème, nous avons ajouté un nouveau type de callback: les callbacks Yocto-API-JZON.

Ce mode est identique au mode Yocto-API, à la différence qu'il envoie par défaut les données dans le format compact. La structure JSON est envoyée en entier uniquement lors de la première connexion à la librairie PHP. Le cache reste ensuite valide et le format compact peut être utilisé pour les callbacks suivants, même si le YoctoHub redémarre ou passe en mode sleep.

Attention, ce mode n'est pas rétro-compatible et fonctionne uniquement si le script PHP a configuré le cache. Il faut donc impérativement utiliser une librairie PHP à jour et appeler la méthode YAPI::SetHTTPCallbackCacheDir() au début du script PHP.

Pour que le YoctoHub utilise ce mode, il faut simplement sélectionner "Yocto-API-JZON" dans le panneau de configuration des callbacks HTTP. Les paramètres sont les mêmes que pour les callbacks "Yocto-API".

Le mode Yocto-API-JZON est disponible dans la fenêtre de configuration du callback
Le mode Yocto-API-JZON est disponible dans la fenêtre de configuration du callback



Conclusion


Si vous utiliser un YoctoHub-GSM, avec cette fonctionnalité vous devriez facilement diviser par deux votre facture de téléphone. Pour les autres YoctoHubs, la réduction du trafic est identique mais son impact est moindre car dans la plupart des cas la connexion est gratuite :-)

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.