For the sake of simplicity all these examples are having sender and receiver as two separated objects in one javascript file. This makes signaling simple, since you just have to directly stuff the offer from one peer into the other. Same with ICE candidates.
You would either have to adapt to existing signaling servers (never investigated that), write your own (that's what I did) or go with simple solutions like key-value stores on the web (like Firebase). Basically YOU are responsible, how one's OFFER reaches the other, how the OFFER is presented there (maybe by an "accept call dialog"), how the ANSWER is traversed back to the callee, how the hangup is done. And you need to organize the exchange of ICE.
It is really a simple task, not rocket-science. If you like you can also use my experimental signaling server, which has a simple
socket.io based protocol. Just drop me a PN on interest