Socket.io est la lib socket la plus populaire dans l'écosystème Node.js. Elle est utilisée par de nombreux services qui nécessitent des fonctionnalités en temps réel comme des notifications push, des jeux et mise à jour de contenu en temps réel.
Dans la v0.9 de Socket.io, il existait de sérieux bugs et fuites de mémoire. Ces bugs sont restés présent pendant plusieurs mois. Pour des petits / moyens projets, les conséquences n'étaient pas visibles immédiatement. Cependant lorsqu'on arrivait à des pics de plusieurs centaines de connectés simultanés (600 / 800), les erreurs commençaient à apparaître et la fuite de mémoire devenait le goulot d'étranglement qui faisaient ralentir, voir planter le service.
Depuis la v1 de Socket.io qui est une abstraction au dessus d'Engine.io, nombre de ces bugs ont été corrigés.
Cependant le manque de réactivité à corriger ces bugs, ainsi que pour des besoins de performance et scalabilité pouvant gérer de très fortes charges, j'ai été amené à développer les serveurs de sockets proche du natif, sans le superflu implémenté dans Socket.io ou encore Primus son concurrent. Le résultat est un gain considérable de performance et une maîtrise parfaite de l'environnement du cluster de serveurs sockets.
De plus, Socket.io et Primus avaient davantage d'utilités à une époque où les navigateurs ne supportaient pas correctement les WebSockets et qu'il fallait user de fallback (Flash, long polling, ...).
Donc, j'utilise de préférence un système de sockets proche du natif (développé et amélioré au fil des années) pour les raisons évoquées ci-dessus. Toutefois si je suis amené à utiliser Socket.io dans un projet client, ça reste tout de même un plaisir de coder avec.