Сервер не «запрашивает» клиента, скорее клиент инициализирует беседу, открывая HTML 5 WebSocket. Затем этот сокет остается открытым, и сервер может в любое время отправить данные обратно клиенту.
Вы можете сделать это в HTML 4, используя «длинный опрос», когда клиент делает запрос, и ответ также остается открытым в течение более длительного периода. Проблема здесь в том, что клиент не может отправить другой запрос на тот же сокет, поэтому ему необходимо держать два сокета открытыми для сервера - один для отправки запроса, другой для полученных ответов. Это плохо, только если у вас есть много клиентов, подключенных к серверу, и вы уже ограничены количеством соединений, которые может обработать ваш сервер.
В любом случае вы хотите настроить сервер на использование «неблокирующих» (NIO) соединений, чтобы ему не требовался один поток на клиента, поскольку кажется, что обработка чего-либо более чем нескольких тысяч одновременных потоков приносит сервер до остановки. Используя неблокирующее решение, теоретически вы можете иметь 50 тысяч или более соединений на экземпляр сервера, хотя насколько это будет полезно, сомнительно из-за количества запросов, которые он может быстро обработать с таким количеством соединений. Если каждый клиент делает запрос в секунду, вы будете обрабатывать 50 запросов в миллисекунду, что вряд ли даст вам достаточно времени, чтобы сделать что-нибудь подходящее, скажем, к базе данных.
Смотрите следующие ссылки:
http://blog.maxant.co.uk/pebble/2011/06/21/1308690720000.html
http://blog.maxant.co.uk/pebble/2011/05/22/1306092969466.html
http://blog.maxant.co.uk/pebble/2011/03/05/1299360960000.html