Второй вариант, но не web-сокеты, а что-то вроде
socket.io, т.к. web-сокеты далеко не везде работают.
Для решения проблемы с волной запросов, можно комнаты обновлять постранично. Т.е. явно все комнаты не нужно будет одновременно показывать на экране (просто не влезут), соответственно, подписывать пользователя только на изменения в тех комнатах, которые сейчас показываются на экране.