У меня нет хорошего решения вашей основной проблемы "подключения" клиента к серверу. Но у меня есть интересная мысль о вашей текущей проблеме «трафика и использования процессора» для периодических пингов.
Я предполагаю, что у вас есть заранее установленный интервал сердцебиения, скажем, 1 мин. Таким образом, если имеется 120 клиентов, ваш сервер будет обрабатывать удары сердца со средней скоростью 2 в секунду. Не хорошо, если половина из них - «бездействующие клиенты».
Предположим, что клиент бездействует уже 15 минут. Этот клиентский браузер все еще должен посылать сердечные сокращения с постоянным заданным интервалом в 1 минуту? Почему бы не сделать его переменным?
Мое предложение простое: меняйте частоту сердцебиения в зависимости от уровня активности клиента.
Когда клиент «активен», сердцебиение работает с частотой 1 в минуту. Когда клиент «неактивен» более 5 минут, частота сердечных сокращений снижается до 50% (по одному каждые 2 минуты). Еще 10 минут, и частота сердечных сокращений снижается еще на 50% (1 через каждые 4 минуты) ... В какой-то пороговый момент считайте клиента «отцепленным».
В этом методе «незанятые клиенты» не будут беспокоить сервер частыми пульсами, что позволит вашему серверу приложений сосредоточиться на «активных клиентах».
Очень много javascript, но, вероятно, того стоит, если у вас проблемы с трафиком и использованием процессора: -)