Ускорит ли частоту опросов мою страницу? - PullRequest
1 голос
/ 23 марта 2012

Итак, у меня есть приложение Rails (которое в данном случае кажется неуместным, но я все равно упомяну об этом). Это своего рода приложение для чата.

Чтобы узнать, какие пользователи в данный момент находятся в чате, я использовал опрос Javascript.

Так просто

$(function() {
    setTimeout(updateUsers, 15000);
});

, где updateUsers просто вызывает запрос на получение AJAX для получения массива пользователей, находящихся в данный момент в чате.

Вот мой вопрос: 15 секунд - довольно долгое время ожидания для опроса. Как часто я должен делать это без проблем с производительностью? Очевидно, это зависит от многих факторов, но я бы хотел услышать эти факторы. Я видел кучу похожих вопросов для получения сообщений в чатах, но ни одного еще для списков пользователей, поэтому я задаю этот вопрос.

Ответы [ 3 ]

0 голосов
/ 23 марта 2012

Это зависит от множества вещей, таких как ваша инфраструктура, количество ожидаемых пользователей и т. Д. Даже если бы у нас были эти цифры, трудно сказать, какой будет хороший таймаут.

Если вы отправляете только простой массив JSON со списком пользователей, я бы сказал, поэкспериментируйте с задержкой 3-5 секунд и проверите оттуда. Это проблема преждевременной оптимизации - вы пытаетесь решить проблему, которой у вас еще нет.

Однако есть два других возможных решения:

Вы можете только отправить разницу. При опросе вы возвращаете сообщение о том, какие пользователи подключились, а какие оставили с момента последнего опроса. Это требует некоторого отслеживания сервера, но может быть сделано.

Другое решение состоит в том, чтобы вообще не использовать опрос и использовать более современную технологию, такую ​​как WebSockets / Long-polling. Это позволит серверу самому отправлять сообщения вашим клиентам. Таким образом, вы можете отправить им начальный список, когда они подключаются, и одно минимальное сообщение каждый раз, когда кто-то подключается / уходит. Отличным решением этой проблемы в среде Node является Socket.IO . Я не очень разбираюсь в Ruby, поэтому я не знаю, делал ли кто-то подобное, но я не удивлюсь, если кто-то перенес все это на Rails. Обыщите, я уверен, вы найдете то, что соответствует вашим потребностям.

0 голосов
/ 23 марта 2012

Я думаю, вам стоит использовать кометную технологию

http://en.wikipedia.org/wiki/Comet_(programming))

Или добавьте некоторую функцию, которая ищет среднее время отклика и изменяет динамический интервал. Возможно, сервер мог бы сказать клиенту, что «у меня много дел, подождите 30 секунд до следующего запроса».

0 голосов
/ 23 марта 2012

Все более частое добавление добавляет дополнительную нагрузку, хотя и сервер, клиент или оба.

Сказав это, я не думаю, что есть «сладкое пятно» (о котором вы, похоже, имеете в виду).Тем не менее, вы можете обратиться к Ruby Push API , который в основном всегда поддерживает соединение открытым и отправляет данные только при необходимости.(Обыскав немного дальше, кажется, есть также плагин Джаггернаут .)

...