2012-03-23 2 views
0

Я работаю над веб-приложением, и я использую опрос, чтобы проверить, есть ли какое-либо обновление. Эти запросы опроса происходят каждые 1 или 2 секунды. Размер ответа составляет 240 байтов, если нет необходимости в обновлении (в этом случае возвращается пустой ответ) и около 10 КБ, который является размером самого содержимого. Моя проблема заключается в том, что она возвращает не менее 240 B в каждых секундах приблизительно, есть ли способ оптимизировать этот ответ, немного увеличив границы?уменьшение размера ответа

Когда я проверил содержимое ответа, я увидел, что для меня важны 50 байтов (идентификатор сеанса и код состояния). Однако в заголовке есть информация, такая как тип подключения, тайм-аут и тип содержимого. Эти параметры будут одинаковыми для каждого запроса этого типа (т. Е. Он всегда требует типа содержимого: «text/html; carset = utf-8»). Итак, могу ли я просто принять эти параметры на стороне клиента и не дать серверу отправить эту информацию заголовка?

Я использую django на стороне сервера и jQuery для отправки запросов ajax кстати. Кроме того, на данный момент не существует никаких проблем с технологией push.

ответ

1

Одним из решений этой проблемы является «длительный опрос». Клиент опроса отправит запрос, и веб-сервер проверяет, есть ли обновление. Если этого не происходит, веб-сервер засыпает секунду или два, а затем снова проверяет цикл, не отправляя ответ. Как только этот цикл увидит обновление, он отправит ответ. Для веб-браузера клиента это будет выглядеть так, как будто сервер перегружен и занимает много времени, чтобы ответить, но фактически соответствующие данные передаются быстро, а ответы «нет данных» просто пропущены.

Я бы рекомендовал добавить тайм-аут в цикл - скажем, 30 или 60 секунд - после чего веб-сервер будет отвечать «без данных», как обычно. Даже 30-секундный цикл сократил бы пустую нагрузку ответа в 15-30 раз.

Предостережение: Я читал об этой реализации, но я не пробовал это сам. Вам нужно будет протестировать совместимость с различными веб-браузерами, чтобы убедиться, что этот довольно нестандартный метод не вызывает проблем на стороне клиента.

+0

Я проверил длительный опрос. Это кажется разумным. Однако, это не вызывает перегрузки на стороне сервера, когда вы все время занимаетесь сном. У меня мало информации о проблемах с производительностью на сервере. – Hgeg

+1

Предполагая, что вы используете механизм сна, такой как time.sleep (2), он не будет менее результативным, чем обычный опрос. Это должно фактически экономить процессорное время - но это, вероятно, будет потреблять больше памяти на главном компьютере, потому что каждый поток запросов находится в памяти намного дольше. Независимо от того, что имеет смысл для вашего приложения или нет, зависит от особенностей вашей ситуации и количества пользователей. Тем не менее, это, безусловно, сэкономит на пропускной способности. –

2

Он действительно складывается, но не так сильно, как вы думаете. Если вы проголосуете каждую секунду в течение полного часа, вы использовали бы только 864K, меньше, чем требуется для типичной веб-страницы с непечатанным кешем. Даже если вы сделали это на целый день, вы говорите о ~ 20M. Может быть, если вы кто-то, как Twitter, вам может быть нужно позаботиться об этом, но я сомневаюсь, что вы будете приближаться к трафику, который будет для этого действительно проблематичным.

Тем не менее, вы можете, конечно, настроить заголовки запроса, но что, если какое-либо влияние, которое это будет иметь на клиента, будет иметь значение для тестирования. Некоторые заголовки, вероятно, могут быть удалены, но другие могут вас удивить, и это технически может изменить браузер для браузера.