There is a method "removeAllListeners()" that removes ALL listeners from a client. I would suggest a method of removing a specific onMessage listener by name.
A useful pattern for in socket.io is to emit some message and then await a Promise for its broadcast back. This allows you to chain the response as part of a parent function. However, its safest to then do a socket.off() for that message type once you've gotten it back. I'd like this same ability when using Colyseus, thanks.