I like the separation of the transports into engine.io, however it would be even better if it exposed a standard Node.js Stream interface so that it played nicely with the growing ecosystem of Stream-related modules. Dominic Tarr, substack, and others have been advocating this idea for awhile: https://github.com/substack/stream-handbook Gluing together various types of streams and stream transformers is a really nice…
You could also just use Primus which exposes a Stream compatible wrapper by default for the client and server. https://github.com/primus/primus (Primus uses engine.io,sockjs,browserchannel,websockets internally so you're no longer locked into a specific framework)
why would I need engine.io,websockets for example when engine.io already uses websockets if it can upgrade the connection to them?