Отображать динамический контент со встроенного веб-сервера
У меня есть встроенное устройство с запущенной версией 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.