Comment fonctionne socket.io?

J'utilise socket.io et j'ai été rapidement configuré (grâce à des exemples sur leur page d'utilisation), mais j'aimerais en savoir plus sur ce qui se passe exactement sous les couvertures et quelle est la technologie qui le fait fonctionner.

Quelles sont les mécaniques exactes de socket.io?

Est-ce sur le port 80 ou un autre?

Est-ce que ça reste ouvert ou cette partie est-elle simulée?

Existe-t-il un moyen de faire un profil de chaque événement socket? (Sorte d'utiliser le violoncelliste pour voir ce qui se passe dans les appels ajax)

Pour le débogage, vous voudrez peut-être essayer Theseus .

Voici un bref aperçu du socket.io SPEC :

Socket.IO vise à apporter une API WebSocket à de nombreux navigateurs et périphériques, avec certaines fonctionnalités spécifiques pour aider à la création d'applications et de jeux en temps réel en temps réel.

  • Support de transport multiple (anciens agents utilisateurs, navigateurs mobiles, etc.).
  • Sockets multiples sous la même connexion (espaces de noms).
  • Détection de la détection par battements cardiaques.
  • Acknoledgments facultatifs.
  • Prise en charge de la connexion avec tampon (idéal pour les appareils mobiles ou les mauvais réseaux)
  • Protocole léger qui se trouve sur HTTP.

Anatomie d'une socket Socket.IO

Un client Socket.IO décide d'abord d'un transport à utiliser pour se connecter.

L'état de la prise Socket.IO peut être disconnected , disconnecting , connected et connecting .

La connexion de transport peut être closed , closing , open et opening .

Une simple poignée de main HTTP se déroule au début d'une connexion Socket.IO. La poignée de main, si elle réussit, entraîne la réception du client:

  • Un identifiant de session qui sera donné pour le transport pour ouvrir les connexions.
  • Un certain nombre de secondes au cours desquelles un battement de coeur est attendu ( heartbeat timeout )
  • Un certain nombre de secondes après que la connexion de transport est fermée lorsque la prise est considérée comme déconnectée si la connexion de transport n'est pas réouverte ( close timeout ).

À ce stade, la prise est considérée comme connectée, et le transport est signalé pour ouvrir la connexion.

Si la connexion de transport est fermée, les deux extrémités permettent de tamponner les messages et de les encadrer de manière appropriée pour qu'ils soient envoyés en tant que lot lorsque la connexion reprend.

Si la connexion n'est pas reprise dans le délai d'attente négocié, la socket est considérée comme déconnectée. À ce stade, le client pourrait décider de reconnecter le socket, ce qui implique une nouvelle poignée de main.

Si vous avez besoin de plus de détails, vous pouvez lire le reste des spécifications ici

La publication de JAM permet de résumer ce qu'est le socket.io; J'aimerais aborder certaines de vos autres questions.

  • Socket.io s'attache à une instance de http.Server et y ajoute des gestionnaires. Il n'écoute pas un port réseau seul; Il ajoute simplement des gestionnaires spécifiques à socket.io à un serveur HTTP existant. (Toutefois, si vous appelez io.listen() avec un numéro, il crée en interne un nouveau serveur HTTP qui écoute le port spécifié et s'y attache.)

  • Il reste vraiment ouvert s'il utilise le transport WebSockets . Il comprend également des mécanismes de recharge qui utilisent des requêtes d'ajax traditionnelles (à long terme). Donc, la réponse dépend des API que le navigateur prend en charge. (Vous pouvez éventuellement configurer les retombées que vous souhaitez utiliser, le cas échéant).

  • Fiddler prend en charge les applications Web, tout comme les outils développeurs de Chrome:

Entrez la description de l'image ici