I'm doing a project with socket.io and I keep running into the same design problem over and over. I have an event called "getFooInfo", with a parameter to identify which foo I want to get information on [socket.emit("getFooInfo", id)]. I then listen for "getFooInfoDone" [socket.once("getFooInfoDone", function(fooInfo) { ... }]. This works great if only one call to getFooInfo happens at a time.