Вам не нужно поддерживать несколько соединений для того, чего вы пытаетесь достичь. Асинхронная природа Javascript позволяет соединению оставаться в живых, пока другие вещи обрабатываются. Возможно, вы подумали, что XHR в javascript блокировались, потому что он однопоточный.
XHR в javascript являются неблокирующими из-за модели цикла событий - механизмы javascript постоянно находятся в цикле, проверяя, завершены ли зарегистрированные вызовы и должны ли обрабатываться его обратные вызовы. Это позволяет его операциям быть неблокирующими и, таким образом, позволяет одному приложению javascript обрабатывать несколько длинных запросов опроса XHR.
Если вы можете использовать jQuery для запроса, XHR довольно хорошо оборачивает эту функцию: http://api.jquery.com/jQuery.ajax/. Таким образом, вы можете определить тайм-аут в 20 секунд и обработать его немедленно (для повторного запуска соединения). с вашим сервером).
В сторону - вы можете рассмотреть возможность использования стека вашего сервера для оптимизации длинных опросов. Убедитесь, что ваш веб-сервер не создает поток на запрос (например, Apache 2.2) - в противном случае вы быстро исчерпаете системные ресурсы! Если вы можете использовать node.js (который отлично подходит для обработки множества одновременных запросов), посмотрите на библиотеку socket.io как на стороне сервера, так и на стороне клиента (http://socket.io/#home).