2015-12-08 3 views
0

У меня есть устройство IoT, которое извлекает файл JSON с веб-сервера. Значение внутри файла JSON изменяется с помощью веб-страницы на основе PHP/HTML. Файл на сервере установлен в 777 разрешений и корректно меняет значение. Однако, когда мое устройство IoT подключается к серверу для анализа JSON, ему предоставляется копия файла, возраст которого не менее 8 дней. Этот заголовок возвращается:Отказоустойчивый ответ JSON

HTTP/1.1 200 OK. 
Content-Length: 15. 
Content-Type: application/json. 
Server: Apache. 
Last-Modified: Mon, 30 Nov 2015 21:28:39 GMT. 
Connection: keep-alive. 
Date: Tue, 08 Dec 2015 08:22:36 GMT. 
. 
{"light": "on"}LED ON 
closing connection. 

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

+1

Попробуйте выполнить тест, добавьте Gram pram в конец вашей ссылки, как 'link? P = 4as6d46as4d' случайную строку, чтобы увидеть, был ли тот же результат – Armen

+0

@Armen. Это в основном то, на что нацелено мое устройство IoT: ' const char * host = " www.example.com "; // Ваш домен String path = "/smarthome/light.json"; ' –

+0

Выполняя то, что вы предложили, вернул файл с текущим временем и датой в качестве последнего модифицированного значения, но содержимое файла остается тем же. –

ответ

1

Так я думаю, у вас есть некоторое кэширование на сервере nigher в вас IoT устройство

1) попытаться проверить в вашем IoT device, если у него есть кэширование

2) попытаться проверить конфигурацию сервера, если он имеет некоторые кеширование

Если вы отказались, то только для того, чтобы создать некоторую логику, которая всегда будет генерировать уникальную коляску в конце вашей ссылки в IoT device и получить json с этой ссылкой.

+0

Итак, на сервере нет кэширования, по данным моей хостинговой компании и phpinfo(). Отсутствие кэширования на устройстве IoT (esp8266 введен в действие как Arduino). Что здесь происходит? Следует отметить, что когда я передаю случайную строку в качестве переменной GET на мою страницу, я получаю последнюю версию страницы, иначе я получаю устаревшую версию. Когда я поделился этим с моим хостом, они сказали, что они видят обновленную страницу. У меня все кэши отключены во всех браузерах. : D –

+0

Попробуйте проверить эту страницу с помощью режима хромового инкогнито без случайной коляски в конце – Armen

+0

Решение, которое я, наконец, использовал, включало ваше предложение. Я положил «? New =» в конце пути к файлу, а затем добавил случайный (999) к нему, чтобы каждый раз запрос был другим. Он работает, но по какой-то причине значения json продолжают меняться автоматически или кто-то в Интернете меняет их. Я могу сообщить вам подробности, если вы хотите немного помочь в этом! :) –

1

Благодаря помощи @Armen и многому чтению в Интернете. Оказалось, что это вызвало две проблемы:

Я обнаружил, что в PHP просто запись в файл не изменяет его атрибут «последний-измененный», и это вызывает проблемы с сервером, отправляющим неправильная версия файла JSON. Чтобы исправить эту проблему, я добавил touch("path/to/file.json"); после каждого раза, когда код написал файл и закрыл указатель на файл. Это означало, что он обновил последний модифицированный атрибут файла, тем самым устранив проблему. Я понимаю, что это, вероятно, что-то очень очевидное, но, будучи новичком, я думаю, что это то, с чем может столкнуться множество новичков, поэтому я подумал, что должен поделиться.

+0

Кроме того, я позже выяснили, что некоторые интернет-провайдеры (например, мои) имеют странные политики кэширования, которые заставляют меня получать отложенные ответы с сервера. Я попытался подключиться к одному и тому же серверу из другой сети, и я сразу начал получать ответы в реальном времени. –

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