rework: ICE-это протокол для обхода NAT. en.wikipedia.org/wiki/Interactive_Connectivity_Est...
stun и turn серверы собирают дополнительные ip-адреса-кандидаты.
эти кандидаты нужно передать обоим участникам для того, чтобы они знали, куда пробовать цепляться.
сервер тут выступает посредником, передавая уже сформированные по протоколу браузером сообщения.
и в чем проблема? при закрытии сокет обрывается, на сервере участник вылетает из комнаты. по возвращению как и при первом присоединении проверяется что комната полная и тогда участники устанавливают соединение как и первый раз.
rework: делаете запрос getUserMedia, устанавливаете соединение с сервером, отправляете на него id комнаты (при разрыве соединения - удаляете). когда второй подключается - на сервере находится этот id, устанавливаете уже прямое соединение.
phpus: у меня самописный hmvc, отдельные вьюшки не использую, по большей части роль вьюшки выполняет отдельный метод (initAction/showAction), родительские контроллеры можно достать из любого места - проблема с меняющейся "шапкой" вообще надумана - как будто "наследование" возможно только с помощью шаблонизаторов.