Один из методов, который можно использовать, - это использовать длительный запрос ajax. Клиент спрашивает, есть ли данные чата. Сервер получает запрос. Если доступны данные чата, он немедленно возвращает эти данные. Если данные чата отсутствуют, он зависает в запросе в течение некоторого периода времени (возможно, двух минут), и если в течение этих двух минут появляются некоторые данные чата, веб-запрос немедленно возвращается с этими данными. Если по прошествии полных двух минут данные чата не получены, вызов ajax возвращается без данных.
Затем клиент может немедленно отправить еще один запрос, чтобы подождать еще две минуты для получения некоторых данных.
Чтобы эти «длинные» http-запросы работали, вам просто нужно убедиться, что для вашего базового вызова ajax установлен тайм-аут, превышающий время, установленное вами на сервере.
На сервере вам необходим эффективный механизм ожидания данных, возможно, с использованием семафоров или чего-то в этом роде, потому что вы также не хотите выполнять внутренний опрос на сервере.
Делая это таким образом, вы можете получить почти мгновенный ответ на клиенте, но делать только 30 запросов в час.
Чтобы быть дружелюбным к аккумулятору ноутбука или мобильного устройства, вам нужно быть внимательным к тому, когда ваше приложение фактически не используется (браузер не отображается, текущая вкладка и т. Д ...) и останавливать запросы в течение этого времени.
Что касается других ваших вопросов, то повторные вызовы ajax (если они разнесены, по крайней мере, на некоторое расстояние друг от друга) на самом деле не сильно используют ресурсы процессора или памяти. Они могут использовать аккумулятор, если не позволяют компьютеру перейти в режим ожидания.