The user directly connects to the target via the signaling server, and the host directly knows the "reverse lookup" address via the visitor's alias. This avoids the need for a two-way public key exchange in the ideal one-way communication environment and prevents public keys in the message records from becoming useless information, as they cannot be directly used as a valid lookup address. You just need to allow the room and alias names to have a longer length.
What exactly is wrong with a quick "two-way" communication, simply to send the public key? By initially connecting, it's essentially like a two-way connection anyway. Then simply sending one message (also verifying the connection is 100% ready). Most designs of networked system have a "handshake" message.
Is it a security thing? Efficiency? I can't think of a valid reason why you can't just "Send message". Messages can be like 256kb (and they're compressed so can be even bigger). Connect, peer sends 1 message, host sends 1 message, end connection. Done. What's the problem?
Why am I even thinking to assist, you're extremely rude. I don't know what it is about crypto that often attracts such self-righteous personalities. Instead of being so stubborn with your design, work with what you have, especially when you are indeed doing something C3 was not designed for.
EDIT: Instead of relying on a company's signalling server whom you clearly seem to have disdain for, you can buy it yourself and host it on your own server, change alias limits or whatever (Whether that is an intentional setting Scirra chose for their public signalling server, or if it's a hard limitation within WebRTC, who knows). construct.net/en/game-assets/tools/multiplayer-signalling-server-2