Каждый клиент может опрашивать сервер, а на стороне сервера держать соединение открытым без ответа.
Как только на стороне сервера обнаруживается сообщение, эти данные возвращаются через уже открытое соединение.При получении ваш клиент немедленно отправляет новый запрос.
Существует некоторая сложность, так как вам необходимо отслеживать на стороне сервера, какие соединения связаны с каким сеансом, и на какие следует реагировать, чтобы предотвратить тайм-ауты.
На самом деле я никогда не делал этого, но это должен быть наиболее эффективный способ использования ресурсов.