Но я то для получения данных никаких запросов не шлю, верно?После загрузки страницы включается скрипт в котором даже не один запрос, а два
А ведь именно это мне это и требовалось - получение данных с ESP8266 чаще, чем раз в секунду.
Но я то для получения данных никаких запросов не шлю, верно?После загрузки страницы включается скрипт в котором даже не один запрос, а два
Причем чаще, чем раз в секунду.Физически вы ничего не нажимаете, запрос делает сам браузер функцией setInterval
Почему, если запрашиваемые данные - это всего-навсего два числа, а то и всего лишь одно?Сколько поставите в setInterval, с такой частотой и будет спрашивать. Я бы не делал get запросы чаще секунды, а то и двух
Так что было?спустя некоторое время после запуска сеанса наблюдается прекращение передачи данных с ESP8266 в браузер
int led_state =LOW;
volatile int curRange=0;
volatile bool newData = false;
void ICACHE_RAM_ATTR handleInterrupt(){
ETS_GPIO_INTR_DISABLE();
newData = true;
led_state=!led_state;
ETS_GPIO_INTR_ENABLE();
}
...
void setup() {
attachInterrupt(pinGPIO1, handleInterrupt, FALLING);
....
}
void loop() {
int i=digitalRead(pinGPIO1); // прерывание датчика
if(i==LOW && !newData)
{
// тут и возникает затык, датчик выставил LOW , а прерывание не отработало
// помогает заглушка
// newData = true;
}
digitalWrite(LED_BUILTIN,led_state);
if(newData)
{
curRange=loxRead(); // читаем датчик
String s = String(curRange);
webSocket.broadcastTXT(s);
}
webSocket.loop();
http.handleClient();
}
Сорри, я уже не помню. Но помню. что был какой-то косяк в программе.Так что было?
Насколько я понимаю расклад(возможно неверно), вы не удаляете созданные запросы и они продолжают "накапливаться" как в браузере, так и в esp. Браузер это в принципе легко переживет, а вот у esp и память и кол-во открытых одновременных запросов ограничено.Какая разница в этом случае, как часто делаются get запросы?
Попытался представить такую ситуацию, и у меня не получилось.Насколько я понимаю расклад(возможно неверно), вы не удаляете созданные запросы и они продолжают "накапливаться" как в браузере, так и в esp. Браузер это в принципе легко переживет, а вот у esp и память и кол-во открытых одновременных запросов ограничено.
Помогу. Говоря утрированно, каждый вызов запроса по Timeout примерно эквивалентен созданию новой страницы браузера обращающейся к esp. Причем запросы в браузере создаются вне зависимости от того есть связь или нет. в том коде нет никаких проверок. На предыдущей страничке pvvx приводил логи на которых после 4 поставленного в очередь (но по всей видимости не обработанного) запроса esp-шка отваливалась от сети.Попытался представить такую ситуацию, и у меня не получилось.
Не понимаю.Помогу. Говоря утрированно, каждый вызов запроса по Timeout примерно эквивалентен созданию новой страницы браузера обращающейся к esp. Причем запросы в браузере создаются вне зависимости от того есть связь или нет. в том коде нет никаких проверок. На предыдущей страничке pvvx приводил логи на которых после 4 поставленного в очередь (но по всей видимости не обработанного) запроса esp-шка отваливалась от сети.
Зато возникает в браузере где это запрос ставится в очередь на некоторое время.А если связи нет, то запрос не достигает ЕСП, и никаких необработанных запросов в ЕСП не возникает.
function initWebSocket() {
console.log('Trying to open a WebSocket connection...');
Socket = new WebSocket('ws://' + host + ':81');
Socket.onopen = function(event) {
console.log("OnOpen");
};
Socket.onclose = function(event) {
console.log("OnClose");
setTimeout(initWebSocket, 100);
};
Socket.onerror = function(evt){console.log("Error"+evt);}
Socket.onmessage = function(event) { processReceivedCommand(event);};
}
Нет, потому что:Зато возникает в браузере где это запрос ставится в очередь на некоторое время.
Говоря образно, ситуация похожа на очередь в поликлинику, где запрос это "пациент", а esp - "врач". "Регистратура" timeout генерирует поток пациентов которые записываются к единственному врачу, и садятся в коридоре перед его кабинетом где всего 4 стула. Если врач работает медленнее регистратуры, то перед его кабинетом случается затык и пятого пациента посылают в пешее эротическое путешествие. Не попавшие на прием пациенты уходят слоняться по поликлиннике, иногда заходят обратно и пытаются занять стулья перед кабинетом, влезая между вновь прибывшими из регистратуры. А регистратура все гонит и гонит новых пациентов. Так понятно?
Это никак не избавляет от одновременно открытых соединений на ESP. Откройте пять-шесть страниц обращающихся к ESP, можно и на разных устройствах.В правильно написанном коде следует дождаться приема пациента(или отказа в приеме), а только потом посылать туда следующего. В моем текущем коде на websockets я вызываю timeout из обработчика закрытия текущего сокета.
По тому что даже канал к нему медленнее, чем обрабатывает браузер.А во-вторых, с чего Вы взяли, что врач (ЕСП) работает медленнее, чем указано в графике регистратуры (браузера)?
В этом примере "коридор" - это "предбанник" сетевого стека esp. А браузер это сама "поликлиника".Нет, потому что:
Я заметил, сокет постоянно закрывается, и переоткрывается моим обработчиком (пишет об этом в лог браузера).Это никак не избавляет от одновременно открытых соединений на ESP.
ИМХО тут одно из двух.По тому что даже канал к нему медленнее, чем обрабатывает браузер.
А "врач" - это ядро МК что ли?В этом примере "коридор" - это "предбанник" сетевого стека esp.
А браузер это сама "поликлиника".
вы не видете результатов некорректного ajax запроса полученного по таймауту.и мы видим сообщение "Не удалось получить доступ к сайту".
совершенно верно.А "врач" - это ядро МК что ли?