add socket.io support