Отображать динамический контент со встроенного веб-сервера

У меня есть встроенное устройство с запущенной версией HTTP-сервера. В настоящее время он может отображать статические HTML-страницы. Вот пример того, как он отображает статическую HTML-страницу:

   char *text="HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"
          "<html><body>Hello World!</body></html>";
   IPWrite(socket, (uint8*)text, (int)strlen(text));
   IPClose(socket);

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

<meta http-equiv="refresh" content="600">

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

Есть ли способ сделать это без необходимости постоянно обновлять страницу?

2 ответа

Решение

Вы можете попробовать следующий (из моего опыта) подход: - Разделить статический и динамический контент, минимизировать динамический контент.

  • Создайте псевдо-CGI-интерфейс, т.е. URL your_embedded_site / sensor.cgi должен быть связан с генерацией следующего HTTP-ответа:

sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\nvalue=%02d", 8, sensor_value);

или просто (это все о ваших соображениях дизайна):

sprintf(cgi_str, "HTTP/1.0 200 OK\r\nContent-Type: text\r\nContent-Length: %d\r\n\r\n%02d", 2, sensor_value);

  • Используйте простой javascript или небольшой java-апплет, чтобы периодически запрашивать your_embedded_site / sensor.cgi. Обратите внимание, что javascript, как правило, зависит от браузера и может быть отключен, апплету java также потребуется дополнительный статический контент - некоторый * sensor_reader.class ", но он обладает исключительной свободой в представлении данных и расширении простого чтения и отображения с большим количеством функций.

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

Пожалуйста, не используйте Java-апплет, чтобы обеспечить это.

AJAX и Javascript на стороне клиента делают подобные вещи легкими, без излишних встроенных апплетов.

Где "гадость" может включать в себя:

  • Проблемы безопасности Java
  • Несоответствие времени выполнения Java
  • увеличенный размер полезной нагрузки (апплеты большие, по сравнению с фрагментами кода Javascript)
  • проблемы со скоростью (запуск апплета может быть медленным)
  • веб-страницу сложнее поддерживать
  • и так далее.

В итоге: это 2013, просто используйте Javascript и AJAX.

Другие вопросы по тегам