Socket.io used to be good, but it is littered with bugs and has been promising 1.0 for nearly 2 years without a single update. We switched to SockJS a few months ago and haven't looked back.
Indeed. And Primus is nice if you want fallbacks and additional features (like reconnects with randomized exponential back-off).
Socket.IO is awesome, but my understanding is that Socket.IO also requires server side components as it adds a layered protocol on top of the WebSocket transport.