#ajax #performance #architecture #client-server #comet
#ajax #Производительность #архитектура #клиент-сервер #комета
Вопрос:
Я работаю над дизайном веб-приложения, которое будет использовать AJAX для связи с сервером на встроенном устройстве. Но для одной функции клиенту потребуется получать очень частые обновления (> 10 в секунду), максимально приближенные к реальному времени, в течение длительного периода времени. Между тем, типичные AJAX-запросы время от времени нужно будет обрабатывать.
Некоторые соображения, уникальные для этого проекта:
Эти данные будут очень маленькими, вероятно, не более одного числового значения.
Одновременно к серверу будет подключен только 1 клиент, поэтому масштабирование не является проблемой.
Клиент и сервер будут находиться в одной локальной сети, поэтому соединение будет быстрым и надежным.
Приложение будет разработано для устройств Android, поэтому мы сможем воспользоваться преимуществами любых функций браузера, зависящих от платформы.
Серверная часть, скорее всего, будет реализована на Python с использованием WSGI в Apache или lighttpd, но это все еще открыто для обсуждения.
Я изучаю методы Comet, включая длительный опрос XHL и скрытый iframe, но я довольно новичок в веб-разработке и я не знаю, какой производительности мы можем ожидать. У сервера не должно возникнуть никаких проблем с подготовкой данных, это просто вопрос как можно более быстрой отправки их клиенту. Является ли 10 обновлений в секунду необоснованным ожиданием для любого из методов Comet или даже регулярного опроса AJAX? Или есть другой метод, который вы бы предложили?
Я понимаю, что в конечном итоге для этого потребуется некоторое прототипирование, но если кто-нибудь может дать мне приблизительную оценку или, что еще лучше, конкретные технологии (на стороне клиента и сервера), которые обеспечили бы наилучшую производительность в этом случае, это было бы большим подспорьем.
Комментарии:
1. 10 в секунду — это довольно высокий показатель для Ajax. Я думаю, что запрос займет больше времени, чем в среднем 100 мс.
2. Я слышал, что 100 мс — это примерно лучшее, что вы можете ожидать только для обработки самого запроса, не считая времени обработки на сервере.
Ответ №1:
Возможно, вы захотите рассмотреть WebSockets. Таким образом, вам не пришлось бы проводить опрос, вы бы получали данные непосредственно со своего сервера. Я не уверен, какие серверные реализации доступны на данный момент, поскольку это все еще довольно новая технология, но я нашел сообщение в блоге о библиотеке для WebSockets на Android:
http://anismiles.wordpress.com/2011/02/03/websocket-support-in-android’s-phonegap-apps/
Комментарии:
1. websockets — выглядит для меня очень интересно! dev.w3.org/html5/websockets и websocket.org
2. Websockets звучит как то, что мне нужно, но, похоже, поддержка браузера очень ограничена. Требуется ли этот фреймворк Phonegap для использования Websockets на Android?
3. @Travis Нет, это не обязательно, в том примере это была просто целевая платформа, потому что Phonegap использовался для разработки их приложения. На самом деле вы не должны ограничиваться использованием его в браузере, вы можете создать собственное приложение, поддерживающее WebSockets, если хотите. Вам просто нужно было бы реализовать W3C WebSocket API самостоятельно: dev.w3.org/html5/websockets Что браузер должен сделать за вас, так это преобразовать входящие данные в события JavaScript с помощью встроенного класса WebSocket. Делая это самостоятельно, вы бы обрабатывали данные напрямую. Отказ от ответственности: Это теоретически, я сам еще не пробовал.
Ответ №2:
Что касается серверной части Python, возможно, вам захочется заглянуть в Twisted. Я бы также рекомендовал подход WebSocket, но в противном случае, и поскольку вы, похоже, сосредоточены на клиенте браузера, я бы по умолчанию использовал потоковую передачу HTTP, а не опрос или длительные опросы. Этот плагин jQuery реализует http-потоковый Ajax-клиент и заявляет, что поддерживает Twisted.
Ответ №3:
Я не уверен, что это вообще было бы полезно, но вы можете попробовать ajax в стиле Comet
http://ajaxian.com/archives/comet-a-new-approach-to-ajax-applications
Комментарии:
1. Я думаю, что автор сообщения уже знает об этом, поскольку он упоминает об этом в своем посте.
2. Я прочитал это немного поздно. Однако не помешает иметь ссылку на некоторую информацию об этом.