follow the socket.io guidelines