2012-01-22 2 views
6

У меня есть требование, чтобы интегрировать веб-сервер в встроенном устройство под управлением Linux и находится в процессе оценки ОССА и коммерческие предложения.Встроенный веб-сервер с интегрированным XML парсером

Системные требования не очень плотные: - память работает до 10 МБ, - может сэкономить 20% + 300 МГц ARM и больше в пакетах, - пользовательский интерфейс будет в jQuery и JSON, поэтому хотел бы подать несколько сотни КБ страниц, связывающих дюжину файлов CSS и JS в течение секунды.

Требования к характеристикам: - Поддержка HTTPS, - 10+ одновременных соединений, - Хорошо протестировано против DOS-атак.

Будет высоко ценят интегрированный синтаксический анализатор XML, основанный на реализации SOAP.

Не является поклонником PHP, но не уверен в том, что на стороне сервера Javascript тоже не знаком с Lua. Поэтому поиск предложений для решений для шаблонов, возможно, на основе Python.

Уже рассмотрено discussions on SO и lists on Wikipedia. Мне известно о thttpd, Mongoose, Cherokee, Appweb.

На данный момент я предлагаю подробные технические предложения и обсуждение вариантов реализации, основанных на опыте из первых рук при развертывании качества продукции.

+0

Все еще оценивая параметры и приветствую больше ввода. Appweb, Mongoose и Cherokee все еще находятся на столе, хотя thttpd слишком ограничен. Хотелось бы понять, насколько небольшой может быть выполнена конфигурация Apache, при этом все еще используются веб-службы Axis2. Http://axis.apache.org/axis2/c/core –

ответ

2

Когда дело доходит до простого стека питон сервера, сочетание я слышал чаще всего внутри сообщества для легкого внедрения является CherryPy (для обеспечения многопоточной объединяют сервер WSGI) с Werkzeug (для создания базовой структуры приложение) Оба очень немного отличаются от WSGI, которые значительно ускоряют время разработки.

Там некоторые довольно хорошие заметки излагающие основные рамочные питон сравнения (хотя и не во встроенной среде, но акцент был сделан на легких развертываний.) at this question, in which Alex "the Machine" Martelli weighed in for these two.

Если вы можете позволить себе накладные расходы интерпретатора Python (который я предполагая, что это нормально, поскольку вы включили его в свой список), werkzeug - отличный способ настроить приложение, состоящее из простых конечных точек. Ответы могут быть сопоставлены встроенными, чтобы помочь в выпуске ваших UI-библиотек (JQuery и т. Д.). В документах Werkzeug есть удивительные примеры.

Один из лучших ресурсов, который я смог найти при сравнении серверов WSGI (чтобы удовлетворить ваши потребности в высоких параллельных соединениях и живучести DOS), можно найти по адресу Nicholas Piel's blog post on the subject, где CherryPy занимает одно из лучших «ударов» -for-your-buck "для ускорения. Сервер WSGI в Cherry готов к развертыванию, и это можно использовать как серверный процесс, обеспечивающий среду для вашего приложения Werkzeug, поэтому вам не нужно внедрять что-то более тяжелое, как Apache с mod_wsgi. Вишня легко способна в среднем около 2000 р/пс с временем отклика под вторым, при умеренной нагрузке.

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

Соединив модуль python minidom (v2.6 +) с маршрутизацией конечной точки в Werkzeug, вы также должны получить очень хорошую скорость разработки. Конструирование сложной схемы URL-адресов прост с использованием функции Werkzeug Map, а учебник на странице документации дает удивительный пример. Между ними не должно быть слишком сложно получить доступ к вашему веб-сервису.

+0

Я видел флешку с шаблонами Deform, которые успешно использовались на полноразмерной платформе. Огромная благодарность за ссылку на сайт nichol.as с графиками производительности, которые дают мне измерения порядка величины. –

1

Вам необходимо решить, какие технологии на стороне сервера вы будете использовать в первую очередь. Для встроенной системы у вас есть серьезные ограничения ресурсов, поэтому убедитесь, что вы выбрали технологии легкого веса соответственно! Сказав, что Node.js - отличная технология (http://nodejs.org/), на которую вы можете обратить внимание. Я также видел некоторые реализации SOAP. С другой стороны, разработка на основе javascript может быть очень грязной! Вы можете попробовать различные решения и начать тестирование функционального поведения вашей системы с помощью таких инструментов, как JMeter (http://jmeter.apache.org).

Некоторые из предложений: Создайте в своей встроенной системе легкий HTTP-сервер (например, Cherokee, lighttpd и т. Д.), Затем настройте PHP (у PHP также есть инструменты SOAP). Позже измените PHP с помощью решения Python или Ruby (например, встроенный Mongrel и т. Д.). Узнайте, как ваша система ведет себя под большой нагрузкой с помощью JMeter.

+0

Отличный указатель на JMeter, спасибо! Еще не уверен в разработке на стороне сервера Javascript, хотя уважаемые люди действительно используют Node. Очевидно, есть SOAP-клиенты для узла https://github.com/milewise/node-soap и https://github.com/marcgreenstock/douche –

1

Я предполагаю, что целью встроенного веб-сервера является предоставление административного интерфейса для конфигурации, операций и состояния.

Для раскрытия информации наша компания строит и развертывает административные веб-интерфейсы на многих встроенных системах со спецификациями, аналогичными тем, что вы опишите на основе нашего продукта, Интернета. Вы можете узнать больше о нашем подходе в http://uweb.workware.net.au/, и вы можете прочитать статью я представил на Embedded Linux Conference 2010 в http://workware.net.au/papers/embedded-scripting.pdf, которая обеспечивает некоторые детали того, как мы сбалансировать размер и производительность касается с быстрым развертыванием с помощью сценариев ,

У вас есть два широких варианта. Во-первых, использовать фреймворк, такой как μWeb, или сервер Barracuda (упомянутый выше) или структуру с открытым исходным кодом , такую ​​как luci (http://luci.subsignal.org/trac). Второй - , чтобы использовать легкий веб-сервер, такой как те, которые указаны ниже, а затем создайте собственную структуру (предположительно на основе jQuery и JSON). Второй вариант займет значительно больше времени, а безопасность - это проблема, связанная с атаками XSS, CRSF и DOS.

В любом случае, я настоятельно рекомендую вам держаться подальше от PHP, Python или на стороне сервера Javascript. Они слишком ресурсоемкие для платформы 300MHz ARM.

Зачем требовать XML и SOAP, если ваш пользовательский интерфейс администратора будет быть jQuery и JSON? У вас есть отдельное требование для поддержки SOAP ? Если да, то gSOAP, вероятно, является разумным выбором (это было несколько лет с тех пор, как я в последний раз его использовал).

Что касается https и 10+ одновременных сеансов, обратите внимание, что начальное SSL-подтверждение связи является значительно ресурсоемкой и встроенной платформой. Если вы часто устанавливаете новые запросы (либо из-за новых сеансов, либо из-за того, что запросы не конвейерны), платформа будет работать. Вероятно, вы можете только установить 1-2 соединения SSL/секунду.

+0

Требование для реализации на стороне сервера SOAP заключается в поддержке устаревшего интерфейса, который предоставляет свойства и конфигурацию устройства параллельно с пользовательским интерфейсом на основе браузера. –

1

Если у вас есть только 10 МБ, тогда многие из предложений не могут быть и речи: узел и рубин быстро превысят этот след с помощью всего лишь небольшого приложения. PHP начнется примерно с 8 Мбайт и может быстро перейти на 20 + МБ. Мы видели один сайт с 50MB PHP-управлением. Определенно, это не хороший выбор для встроенных, если у вас нет ГБ, чтобы сэкономить.

Я использовал Appweb с ESP, который представляет собой c-language MVC framework и Ejscript, который является Javascript на стороне сервера. Ejscript имеет синтаксический анализатор XML и может обрабатывать требование SOAP. В Appweb включен очень простой синтаксический анализатор XML. Вам понадобится libxml, если вы хотите обработать SOAP высокого уровня.

Appweb 4 имеет хорошую защиту DOS. Вы можете ограничить количество одновременных запросов от одного клиента с помощью директивы LimitRequestPerClient. LimitParseTimeout также помогает быстро закрыть запросы DOS, которые не заключают их заголовки. В изолированной программной среде Appweb имеется множество директив для характеристики вашего груза - это помогает DOS и другим угрозам безопасности.

Ваш другой выбор - перейти на чистый Javascript и использовать Ejscript, в который встроен HTTP-движок Appweb http.

Смежные вопросы