web-dev-qa-db-fra.com

Plusieurs connexions websocket

Y at-il des avantages à avoir deux connexions Websocket distinctes sur le même serveur à partir du même client? Cela me semble un mauvais choix de conception, mais y a-t-il une raison pour laquelle/où cela devrait mieux fonctionner?

35
Christian

Il y a plusieurs raisons pour lesquelles pourrait vous voulez le faire, mais elles ne sont probablement pas trop courantes (du moins pas encore):

  • Vous avez à la fois des données chiffrées et non chiffrées que vous envoyez/recevez (par exemple, certaines données sont volumineuses mais non sensibles).
  • Vous disposez à la fois de données en continu et de données sensibles au temps de latence: imaginez un jeu interactif qui contient parfois de la vidéo en continu. Vous ne voulez pas que les flux de média volumineux retardent la réception des messages de jeu normaux sensibles à la latence.
  • Vous avez à la fois des données textuelles (par exemple, des messages de contrôle JSON) et des données binaires (des tableaux ou des blobs typés) et vous ne voulez pas vous embêter à ajouter votre propre couche de protocole pour vous distinguer puisque WebSockets le fait déjà pour vous.
  • Vous prenez en charge plusieurs sous-protocoles WebSocket (le paramètre facultatif après l'URI) et la page souhaite en accéder plus d'un (chaque connexion WebSocket est limitée à un seul sous-protocole).
  • Plusieurs services WebSocket différents sont situés derrière le même serveur Web et le même port. Le choix du client par connexion peut dépendre du chemin d'accès, du schéma d'URI (ws ou wss), du sous-protocole ou même du premier message d'un client à un serveur.

Je suis sûr qu'il y a d'autres raisons mais c'est tout ce à quoi je peux penser dès le départ.

60
kanaka

J'ai constaté que la logique client pouvait être simplifiée beaucoup plus facilement lorsque vous vous abonnez uniquement aux mises à jour de certains objets gérés par le serveur. Au lieu de concevoir un protocole d'abonnement personnalisé pour un seul canal, vous pouvez simplement ouvrir un socket pour chaque élément.

Supposons que vous ayez obtenu une collection d’éléments via une API REST à

http://myserver/api/some-elements

Vous pouvez vous abonner aux mises à jour d'un seul élément en utilisant une URL de socket comme ceci:

ws://myserver/api/some-elements/42/updates

Bien sûr, on peut dire que cela ne s’adapte pas aux pages complexes. Cependant, pour de petites applications simples, cela pourrait vous rendre la vie beaucoup plus facile.

1
lex82

Je suis actuellement à la recherche d'une solution pour avoir deux connexions au même websocket. Ma raison:

  • J'ai écrit un scénario de test dans QUnit et je souhaite simuler plusieurs clients et rechercher les réponses correctes des différents clients.
0
Manuel_B