Simplicite et gestion des websockets

Bonjour,

Depuis la version 4 de simplicité, les websockets sont actifs par défaut dans nos applications.

Nous avons rencontrés des difficultés dans la gestion des websockets et nos reverses proxys. En effet un client monopolise une session TCP persistance (voir plus en fonction du nombre d’onglet ouvert) et entraine une utilisation importante de ressource sur ces équipements alors que l’application n’utilise pas d’action ayant besoin d’utiliser ce Protocol.

Il y a t’il un moyen de désactiver lorsque c’est inutile dans le fonctionnement de l’application l’utilisation de websocket ?

Cordialement

Pour simplement inhiber la remontée des logs via websockets il faut mettre le paramètre système USE_WEBSOCKET_LOG à no. Une bonne pratique étant (comme ça doit être le cas par défaut) de le mettre à no et de le surcharger par paramètre utilisateur pour les utilisateurs que ça concerne (typiquement designer).

Il y a aussi un paramètre plus bas niveau qu’on peut passer à la JVM qui inhibe totalement tout ce qui concerne les websockets: -Dserver.websocket=false (la valeur par défaut est true).

PS: parler de la “version 4” n’est pas suffisant, merci de systématiquement nous indiquer la version, le patch level et la révision dont on parle (vous pouvez facilement obtenir ces infos en appelant l’URI /health)

est-ce que passer USE_WEBSOCKET_LOG à “no” nécessite un redémarrage pour être pris en compte?

Je ne pense pas…

Personnellement je laisse toujours le paramètre système principal à no et je gère des paramètres utilisateurs en surcharge qui eux sont bien pris en compte à l’ouverture des sessions utilisateur. Donc la question de la prise en compte du paramètre principal ne se pose jamais.

PS: Par contre le -Dserver.websocket=false lui nécessite forcément un redémarrage.

Rebonjour,

Sur une application type en Version 4.0.P23 j’ai bien la valeur USE_WEBSOCKET_LOG à “no”

Mais j’ai quand même pour un utilisateur externe (non adminiistrateur) qui monte une session websocket. En l’espace d’une heure çà représente sur cette application 72 sessions. Si je prends toutes les applications simplicité sur le même créneau cela me prend environ 400 sessions.

Ne serait il pas plus simple d’avoir une paramétrage admin pour changer la fonction du js d’appel ?

function start(uri,callback){var self=this;var u=Simplicite.URL.replace(/^http:/,“ws:”).replace(/^https:/,“wss:”)+(uri||Simplicite.UI_PATH+"/events");console.debug(“Event websocket URL = “+u);ws=new WebSocket(u);ws.onopen=function(){console.debug(“Events websocket opened”);console.log(” ___ _ _ _ _ _ \n/ () __ _ | (_)() | /_/\n\ \ | ’ \| ’ \ | / | | / -)\n|/|||| .__/|\__||\\|\n ||\n”);onStart(callback);};ws.onmessage=function(message){var event=undefined;try{event=JSON.parse(message.data);}catch(e){event=message.data;}

Cordialement

Si vous ne voulez pas du tout de gestion de websockets la solution c’est le -Dserver.websocket=false.

PS: On va quand même re-checker comment tout ça fonctionne pour voir si on pourrait rendre ça plus simple.

le problème sera de générer un hook spécifique en cas d’utilisation ou non du websocket qu’il faut prendre en compte lors de l’installation et la mise à jour des environnements.

Alors que laisser la possibilité au dev de mettre en place ou non l’utilisation des websockets me semblent plus judicieux ?

En tout cas merci pour votre retour

Oui c’est l’idée: voir si on peut ajouter un paramètre système plus global genre USE_WEBSOCKETS = yes/no à la place du paramètre de JVM -Dserver.websocket=false (et dans ce cas le paramètre système USE_WEBSOCKET_LOG ne piloterait bien que de la remontée des logs et ne serait donc donc pas pris en compte si USE_WEBSOCKETS = no)

Je dois juste vérifier si c’est faisable car, de mémoire, la prise en compte du -Dserver.websocket=false a lieu très tôt dans le processus de démarrage et c’est pour cela que c’est un paramètre de JVM et pas un paramètre système paramétrable…