Обработка XMLHttpRequest для вызова внешнего приложения - PullRequest
0 голосов
/ 25 мая 2010

Мне нужен простой способ использования XMLHttpRequest для доступа веб-клиента к приложениям на встроенном устройстве. Я запутываюсь, пытаясь понять, как сделать что-то тонкое и легкое, которое обрабатывает XMLHttpRequests, поступающее на веб-сервер, и может преобразовывать их в вызовы приложений.

Ситуация:

  • Веб-клиент, использующий Ajax (особенно ExtJS), должен отправлять и получать асинхронно в существующее встроенное приложение. Это не просто толстый клиент / тонкий сервер, клиент должен запускать фоновую проверку состояния приложения.
  • Приложение может предоставлять интерфейс сокетов с известным набором команд, событий и значений конфигурации. Конфигурация может быть передана в виде XML, поскольку она поступает из базы данных SQLite.
  • Между клиентом и приложением находится веб-сервер lighttpd, работающий что-то , которое каким-то образом обрабатывает перевод. Это что-то является проблемой.

Что я думаю, я хочу:

  • Lighttpd может использовать FastCGI для маршрутизации всех XMLHttpRequest во внешний процесс. Этот процесс будет понимать HTML / XML и переводить между ним и языком приложения. Он будет иметь собственную логику для имитации отправки уведомлений клиенту (получать XMLHttpRequest, не отвечать, пока не будет доступно следующее уведомление).
  • C / C ++. Я бы очень хотел избежать установки Java/PHP/Perl на встроенное устройство. Поэтому мне нужно больше понимания на низком уровне.

Как мне это сделать?

  • Существуют ли хорошие библиотеки C ++ для интерпретации заголовков CGI и HTML, так что мне не нужно выполнять какую-либо синтаксическую обработку, я могу просто иметь дело с содержимым запроса / ответа?
  • Есть ли хорошие ссылки на то, что происходит на стороне сервера при обработке интерфейсов XMLHttpRequest и CGI?
  • Существует ли какой-либо пакет, который уже выполняет большую часть этой работы, или мне придется создавать компоненты без HTTP / CGI с нуля?

Ответы [ 2 ]

0 голосов
/ 25 мая 2010

Я не имел ввиду, что вы не знали сокета. Я просто предложил способ решения проблемы, в котором я слышу много слов: XML / HTML / Ajax / XmlHttpRequest / Java / PHP / Perl / C ++ / CGI и т. Д. И предлагаю способ упрощения до более мелкого, более понятного проблема. Позвольте мне уточнить:

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

Так что, если вы просто решите простую задачу, например, добавите 2 числа. За исключением того, что эти 2 входных номера будут переданы на веб-сервер, а затем веб-сервер перейдет на встроенное устройство, где выполняется добавление. Результат передается обратно на веб-сервер, обратно в браузер для рендеринга. Если вы можете сделать это много, вы уже можете делать поток данных везде, где хотите.

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

"... какой бы HTTP ни приходил на сервер в виде полезных битов информации и генерировать правильный ответ HTTP"

... но это ничем не отличается от того, как вы обрабатываете HTTP-запрос на сервере, используя ваш серверный язык.

... как реализовать внутренний процесс в C / C ++ вместо установки пакета, такого как PHP

Если встроенное устройство запрограммировано на C / C ++, вам необходимо знать, как выполнять программирование сокетов на C / C ++. На вашем веб-сервере вы также должны знать, как программировать сокеты, за исключением того, что будет на этом серверном языке.

Надеюсь, это поможет.

0 голосов
/ 25 мая 2010

Если я правильно понимаю, то, как я подхожу к этой проблеме, будет трехуровневым (не стоит слишком сильно зацикливаться на трехуровневых модных словах, о которых мы все слышали):

  1. JavaScript (ExtJs) в браузерах передает HTTP, Ajax с использованием XmlHttpRequest, raw (naked) или обертки на самом деле не имеет значения для веб-сервера (Lighttpd, Apache, ...).
  2. Поскольку приложение на встроенном устройстве может общаться по сокету, веб-сервер будет использовать сокет для связи со встроенным устройством.
  3. Вы можете решить добавить больше бизнес-логики в JavaScript и сделать код Apache / Lighttpd действительно тонким, чтобы он не зависал.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...