• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь WebSockets

ave

New member
Проблема с подключением этой библиотеки: GitHub - Links2004/arduinoWebSockets: arduinoWebSockets

В менеджере библиотек пишет установлена, а в скетче она неактивна и не компилируется.
Програму перезагружал. Что дальше делать не понятно. Может, кто-то знает в чем проблема...
Нужна помощь...

 

ave

New member
Теперь компилируется, но в скетче include не оранжевый а черный. Я так понял там оно все равно каким цветом.
И работает как-то странно, через раз. Здесь есть кто-то кто с WebSockets работал? Есть какие-то простые примеры? Может с другими библиотеками. На форуме практически нет информации по этой технологии.

Тестовая страница:
websocket.org Echo Test - Powered by Kaazing

 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
Не пользовался websocket на esp и не буду. Из принципа. Вы в курсе как он работает? Не на esp а вообще? Надо сделать так чтобы сервер мог послать сообщение клиенту когда хочется серверу. Как это реализовано? При подключении клиент посылает пустышку серверу. Сервер создает сессию и держит ее пока не понадобится что то передать клиенту. Когда сервер припечет что то послать клиенту он отправляет как бы ответ на пустышку и закрывает сессию и тутже получает новую пустышку. То есть в памяти сервера всегда находятся сессии от ВСЕХ подключившихся клиентов, даже тех которые не спросясь уже давно отвалились. Теперь вспомним сколько памяти у esp. Думаю теперь понятно почему на этом форуме websocket не в моде :)
 

pvvx

Активный участник сообщества
Не пользовался websocket на esp и не буду. Из принципа. Вы в курсе как он работает? Не на esp а вообще? Надо сделать так чтобы сервер мог послать сообщение клиенту когда хочется серверу. Как это реализовано? При подключении клиент посылает пустышку серверу. Сервер создает сессию и держит ее пока не понадобится что то передать клиенту. Когда сервер припечет что то послать клиенту он отправляет как бы ответ на пустышку и закрывает сессию и тутже получает новую пустышку. То есть в памяти сервера всегда находятся сессии от ВСЕХ подключившихся клиентов, даже тех которые не спросясь уже давно отвалились. Теперь вспомним сколько памяти у esp.
Нормально websocket работает. Только через него гонятся данные на всякие графики, не через тормозные Ajax или Json. websocket примерно в 100 раз быстрее на одно соединение и трансфер у него к 1 Мегабайту в сек. А для запроса и передачи Ajax или Json данных на пару переменных ходит целое соединение и разъединение. Т.е. целая сессия. И интерактивные страницы ужасно работают через Ajax или Json - пару штук изменений полей данных за секунду это предел у Arduino по Ajax или Json.
Измерение напряжения питания и тока с датчика типа INA219 на с web-сервера ESP нормально смотрится бегущим графиком в 500 точек в секунду через websocket... Примеры правда давал не на Arduino, но кто мешает это сделать и на Arduino?
 
  • Like
Реакции: ave

ave

New member
Не пользовался websocket на esp и не буду. Из принципа. Вы в курсе как он работает? Не на esp а вообще? Надо сделать так чтобы сервер мог послать сообщение клиенту когда хочется серверу. Как это реализовано? При подключении клиент посылает пустышку серверу. Сервер создает сессию и держит ее пока не понадобится что то передать клиенту. Когда сервер припечет что то послать клиенту он отправляет как бы ответ на пустышку и закрывает сессию и тутже получает новую пустышку. То есть в памяти сервера всегда находятся сессии от ВСЕХ подключившихся клиентов, даже тех которые не спросясь уже давно отвалились. Теперь вспомним сколько памяти у esp. Думаю теперь понятно почему на этом форуме websocket не в моде :)
Юрий Ботов, я думаю вы не правы. По-моему websocket по-другому работает. При подключении клиента сервер создает сокет и держит его сколько нужно. Сокет - это всего несколько байт токен-идентификатора подключенного клиента. При отправке сервером сообщения клиенту сессия не закрывается и ответ не обязателен. Сессия (сокет) закрывается в основном по команде от клиента. Хотя можно написать процедуру закрытия сервером всех сокетов, например, раз в сутки, а клиенты при закрытых сокетах могут заново переконектится уже с новыми сокетами. И память не будет засоряться. Конечно, esp не для 100 000 клиентов, но, думаю до 100 клиентов esp потянет. Хотя могу и ошибаться, память еще не считал. И правильней, наверное, делать сервер на Raspberry Pi, а на esp только клиенты.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Конечно, esp не для 100 000 клиентов, но, думаю до 100 клиентов esp потянет. Хотя могу и ошибаться, память еще не считал.
До пары десятков при малом использовании памяти другими задачами. Websocket - по ресурсам это открытое TCP соединение + несколько других переменных (ключ и т.д.). Т.е. не так много по памяти, но памяти у EPS8266 очень мало.
Ресурс при этом жрет открытый и активный в данный момент Websocket, совершенно равный любому простому соединению, хоть UDP. И нет смысла использования вечно открытого Websocket-а. Его открывают на время, когда требуются пропуск данных через него.
Для сети и прочего всё это без разницы. Ограничения только в памяти ESP8266 и реализации LwIP и аппаратной части WiFi на нем. LwIP в ESP держит всего 4..6 активных соединений, WiFi (по ресурсам) - 4. Всё что выше вызывает замедление и увеличеное использование ресурсов...

@Юрий Ботов - простейший HTTP сокет требует и занимает больше ресурсов, чем WebSocket. Размер дополнительных заголовков и пакетов в сети у HTTP сокета на каждую переменную или запрос у больше чем у WebSocket-а во много раз. Т.е. в среднем, при сравнении HTTP keep-alive и WebSoscket разница в ресурсах по всем устройствам, включая сетевые свичи - десятикратная.
Не использование WebSocket вами говорит только о том, что у в ваших устройствах нет передаваемых данных более 1 переменной в минуту.
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
@pvvx - боюсь нам обоим надо перечитать спецификации websocket :) , освежить так сказать... Мне отчего то помнится что websocket это ВИРТУАЛЬНАЯ надстройка над HTTP соединением при которой HTTP сеанс не рубится после каждого запрос-ответ а остается ПОСТОЯННО открытым. Поэтому вэб-сокет НЕ МОЖЕТ занимать меньше ресурсов чем HTTP сокет, потому что он сам HTTP сокет плюс еще немножко. Websocket я использую но на основной работе (там сервера побольше), а вот на esp использовать не хочу.
 

pvvx

Активный участник сообщества
@pvvx - боюсь нам обоим надо перечитать спецификации websocket :) , освежить так сказать... Мне отчего то помнится что websocket это ВИРТУАЛЬНАЯ надстройка над HTTP соединением при которой HTTP сеанс не рубится после каждого запрос-ответ а остается ПОСТОЯННО открытым. Поэтому вэб-сокет НЕ МОЖЕТ занимать меньше ресурсов чем HTTP сокет, потому что он сам HTTP сокет плюс еще немножко. Websocket я использую но на основной работе (там сервера побольше), а вот на esp использовать не хочу.
Это антирекламное мнение из вики по websocket. :)
Websocket существует и отдельно от HTTP. Сервер может не иметь полного HTTP, а иметь несколько портов с websocket.
Так-же HTTP keep-alive - это вечное соединение, пока не подана команда закрытия.
В HTTP для передачи параметров в одном соединении у нас есть возможность использовать формат мультидата. Он имеет страшно большие размеры заголовков и много кода по их парсингу.
Посчитайте что требуется для запроса по Ajax или Json 100 переменных в сек и сравните это с Websocket. Даже не надо сравнивать с форматом передачи бинарных данных у Websocket :) Затем откройте Wireshark и оцените трафик... Тут даже комментировать будет нечего.

Реальное сравнение Websocket с Ajax или Json на ESP гласит о том, что Websocket позволяет обслужить на ESP8266 около тысячи запросов строковых переменных в секунду, а Ajax или Json - до 10. Т.е. стократная разница.

Для примера опроса датчика INA219 пришлось даже вставлять задержку :)
esp8266web/i219ws.htm at master · pvvx/esp8266web · GitHub
Не успевает датчик подготовить новые данные в регистрах :)
 
Последнее редактирование:

ave

New member
Юрий Ботов, то, что вы описали относится к технологии Ajax.

pvvx, из вашего примера "~inc:grfx1.inc~" - эта команда include файла на каком языке?
Реальное сравнение Websocket с Ajax или Json
WebSoscket и Ajax - это технологии, а Json или XML - это форматы данных. Кажется, так правильнее.

Меня вот еще одно интересует. Есть еще одно ограничение - по каналам или частотам или количеству физических подключений, не знаю как выразиться. Вопрос - сколько клиентов могут подключиться к одной точке доступа одновременно? Плюс помехи от соседей, количество занятых каналов. Тоисть реально ли на esp строить аналог Z-Wave сети для одной квартиры или дома? Или не стоит над этим заморачиваться?

Для примера видео про устройства Z-Wave. Мотать в конец на настройки.
Посмотрев, сколько там устройств и какие сложные настройки, мне плохо стало.

 
Последнее редактирование:

pvvx

Активный участник сообщества
pvvx, из вашего примера "~inc:grfx1.inc~" - эта команда include файла на каком языке?
На моем. Это для парсера - вставка другого файла...

WebSoscket и Ajax - это технологии, а Json или XML - это форматы данных. Кажется, так правильнее.
А пофиг :) Байты есть байты. Один бит другой в фрейме - другая система? :)
Меня вот еще одно интересует. Есть еще одно ограничение - по каналам или частотам или количеству физических подключений, не знаю как выразиться. Вопрос - сколько клиентов могут подключиться к одной точке доступа одновременно? Плюс помехи от соседей, количество занятых каналов. Тоисть реально ли на esp строить аналог Z-Wave сети для одной квартиры или дома? Или не стоит над этим заморачиваться?
Сложно сразу вразумительно ответить - может позже накалякаю что :)
 
  • Like
Реакции: ave
Сверху Снизу