update with socket.io