What's the difference between engine.io and socket.io?
engine.io is a lower level library than socket.io.
Engine is to Socket.IO what Connect is to Express.
If you want the lower level abstraction, use engine.io. If you want a websocket abstraction, keep using socket.io.
engine.io is of more interest to you if you're building a library/framework on top of socket.io.
socket.io is of more interest to you if you're building an application on top of socket.io.
socket.io is built on top of engine.io.
socket.io is engine.io with bells and whistles.
if you don't need everything socket.io has (redis store, groups, etc.) just use engine.
A bit late to the game :-), but I'll mention it here for posterity.
Aside from being "lower level", one of the most important differences is socket.io will start with websockets first & degrade until it finds a transport that can work. On the other hand, engine.io will start with short polling (and upgrade on the side until it hits a wall).
Why?
From the user perspective, an unsuccessful WebSocket connection can translate in up to at least 10 seconds of waiting for the realtime application to begin exchanging data. This perceptively hurts user experience.
At the moment (2013), websockets isn't pervasive yet (e.g. older browsers, cellular networks, etc.) so it's smart to start with the XHR 1st.
See https://github.com/socketio/engine.io (Goals section) for more info.