Я знаю, что это дерьмовый ответ, но я бы построил его сам. Сложная часть - это подталкивание с сервера, я бы проверил http://socket.io/ на стороне клиента и какой-то неблокирующий сервер на бэкэнде (на данный момент узел наиболее раскручен, но есть множество вариантов.), поскольку длительные постоянные соединения довольно быстро поставят большинство классических серверов на колени. Но как только вы это сделаете, все остальное будет довольно просто, и вы получите преимущество тесной интеграции с вашим приложением.
ОТВЕТ НА ВОПРОС В КОММЕНТАРИИ: зависит от того, какая у вас платформа. Например, я знаю, что ASP.net будет делать 4 рабочих на ядро. Таким образом, на четверке вы получаете 16 рабочих, которые обслуживают все ваши нестатические запросы. Таким образом, если бы вы работали на 4-х ядерном сервере, 16 пользователей с постоянными соединениями полностью блокировали бы доступ к серверу. Ruby и python становятся немного сложнее, но обычно их число будет еще ниже. Честно говоря, я не знаю достаточно о том, как php работает на этом уровне, но я думаю, что история будет похожей.
Теперь новые серверы имеют функцию, называемую асинхронной обработкой запросов, где вместо того, чтобы каждый рабочий блокировал во время использования, каждый рабочий блокирует только тогда, когда он активно отправляет или получает. Из-за этого постоянные соединения не имеют большого значения, поскольку на самом деле не имеет значения, как долго соединение остается открытым, оно имеет значение только тогда, когда вы действительно что-то делаете.
Все, что говорится, из того, что звучит, ответ Йанса, вероятно, больше подходит для вашей ситуации. Но опять же, это потому, что Jabber был разработан специально для постоянных соединений.