Votre avis sur les websockets

Bonjour,

J’ai besoin de faire des applications qui dialogues avec des systèmes en temps réel. Par exemple, il faut que je branche un raspberry pi et que celui-ci envoie un signal à un serveur pour lui donner des informations. On doit pouvoir également envoyer un message à partir du serveur à tout les clients.

J’ai commencé à utiliser les websockets avec https://github.com/igrigorik/em-websocket comme serveur. Au niveau des clients, j’ai du python ou du javascript.

À votre connaissance, existe-t-il des raisons pour ne pas utiliser les websockets ? Quels sont les bonnes pratiques ?

Merci !

1 « J'aime »

Bonjour,

Déjà, une question me vient à l’esprit : Quel est/sont ton/tes clients ? As-tu une application lourde et une application légère ou tu es dans un autre cas ?

Ensuite, les websockets, comme leur nom l’indique, c’est du web. Autrement dit, tu ne peux les utiliser qu’avec des applications web (donc le client est forcément un langage navigateur). Cependant, il y a bien sûr la notion de sockets qui est, elle, universelle et dont des API existe depuis longtemps (et normalement compatibles websockets). Cf. https://fr.wikipedia.org/wiki/WebSocket, bien que la page ne me semble pas à jour. Je me permets cette remarque en raison de ton client python qui ne répond pas à la condition « est un navigateur ».

Aujourd’hui, leur implémentation est plutôt correcte dans les navigateurs (cf. http://caniuse.com/#search=websocket). Je ne dirai donc pas de ne pas les utiliser. Cependant, il ne faut pas ne jouer qu’avec elles.

N’utiliser les sockets que pour les transferts de message en temps réel. Faire attention au nombre de clients connectés simultanément à la websocket qui peuvent alourdir le serveur (CPU et mémoire). Après, niveau implémentation, c’est en fonction des frameworks utilisés (autant serveur que client).

Honnêtement, je n’ai jamais eu à utiliser les websockets en production, car mes besoins et ressources ne me le permettaient pas. Toutes mes remarques sont plus théoriques que pratiques lors de mes recherches, mais pourront peut-être t’aiguiller.

J’ai une application web qui reçoit liste les appareils connectés. Pour le moment, elle n’envoie aucun message mais ça peut venir.

Les websocket ne fonctionne pas uniquement avec des “langages de navigateur”. Mon script en python communique avec mon serveur en Ruby qui envoie des message au client en JavaScript. Je pourrais très bien faire un truc avec des websocket juste pour mon code en Ruby et mon code en python. Simplement, je ne pense pas qu’il y ai des avantage à ça part rapport à l’utilisation des sockets. Dans mon cas, étant donné que j’ai quand même une communication avec du JavaScript, je doit/préfère utiliser des websockets.

1/ Si je comprend bien, tes appareils connectés ont une interface Web. Sinon, je ne comprend pas pourquoi communiquer avec des techno web et pas plus basique (genre SNMP).

2/ tu dois faire attention au timeout ou aux échec de connexion. Vu que “Websocket” gère la connexion, il peut déco un client car il pense avoir perdu la connexion. Du coup, tout le monde devra parler pour rester connecté.

3/ Quand le serveur envoie un message aux clients, fait gaffe au déco/reco des clients, je ne sais pas comment WebSocket gère ça (le fait qu’un client être en doublon). Idem si un client vient d’être déco (combien de fois va-t-il essayer)

Comme @kneelnrise, je n’ai jamais utiliser WebSocket, donc ça reste les problèmes vu sur le papier, pas en pratique.

1/ Les raspberries non pas forcement de techno web spécialement. J’utilise uniquement une techno web parceque j’ai des clients web et c’est le même serveur.

2/ Je n’ai pas de problème à gérer la reconnexion.

3/ J’imagine que je peux vérifier l’unicité des clients avec les adresses MAC.

Merci pour vos avis. D’après ce que je comprend, ce n’est pas une solution invalide et je pense que je vais continuer à les utiliser.

Pourquoi ne pas utiliser AMQP ? Pour les clients web ca fonctionnera à base de WebSockets et pour les autres, une API dédiée.

Une WebSocket est une spécification d’un protocole permettant une communication bidirectionnelle et full duplex sur une seule socket TCP entre un client et un serveur.

Initialement développé pour HTML 5, WebSocket a été normalisé par l’IETF et le W3C. Tous les navigateurs récents implémentent et supportent les WebSockets.

Ce protocole permet notamment d’implémenter facilement et de manière standard l’envoi de données en mode Push à l’initiative du serveur.

Le support des WebSockets dans Firefox suit les évolutions continuelles de la spécification WebSocket. Firefox 6 met en œuvre la version 7 du protocole sous-jacent, tandis que Firefox 7 mets en œuvre la version 8 (comme spécifié dans le draft 10 de l’IETF). Firefox mobile supporte WebSocket à partir de la version Firefox mobile 7.0.

Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s