added socket.io support