Add socket.io and make caching optional