Поддержка websockets

Новые релизы, обновления и т.п.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Поддержка websockets

Сообщение sergejey » Вт окт 20, 2015 3:38 pm

Очень большое и достаточно рискованное обновление. Пожалуйста, сообщайте о найденных неполадках в работе.

Итак, небольшой "ликбез". Технология websockets (вебсокетов) была в своё время разработана для поддержки браузерами обновления содержимого страницы в реальном времени. Т.е. буквально в реальном, а не иммитация оного с помощью технологии AJAX. Основное отличие в том, что в случае AJAX-а браузер периодически отправляет запрос на сервер и разбирает его для изменения состояния страницы, а в случае вебсокетов браузер устанавливает одно постоянное соединение с сервером и получает команды от сервера на инициирование каких-либо изменений. Последнее позволяет избавиться от задержек в обновлении интерфейса и реагировать на серверные изменения сразу, как только они происходят.

Теперь ближе к нашей теме. Что нам даёт переход на вебсокеты:
* Мгновенное обновление интерфейса при изменении данных в системе (сцены, меню, домашние страницы)
* Избавляемся от понятия "время авто-обновления" (меню, домашние страницы)
* "Подписка" на обновления свойств объектов для кастомных интерфейсов (домашние страницы)
* Уменьшается загрузка на сервер, т.к. отключаются AJAX-запросы (сцены, меню, домашние страницы)

Короче, в этом самом рискованном обновлении реализована поддержка вебсокетов со всеми вышеперечисленными плюсами, но обновление слишком серьёзное, чтобы я мог гарантировать стабильную работу.

Как пользоваться -- как обычно, ничего дополнительно настраивать не нужно. После перезапуска системы запускается дополнительный цикл cycle_websockets, который создаёт сервер вебсокетов на порту 8001 (по-умолчанию), после чего весь веб-интерфейс использует для обновления состояния веб-сокеты.

В /config.php можно опционально использовать следующие настройки:

Код: Выделить всё

Define('DISABLE_WEBSOCKETS', 1); // если не закомментировано, то протокол вебсокетов не старует и всё должно работать по-старому
Define('WEBSOCKETS_PORT', 8001); // здесь можно поменять порт, если он занят. если строчку не добавлять, то будет использоваться пот по-умолчанию
 
Некоторые особенности использования в домашних страницах.
Свойства объектов можно по-прежнему вставлять в html-код как %object.property%, так и %object.property|NN%, но при включенных вебсокетах, значение NN (время обновления в секундах) игнорируется и свойство обновляется не в заданном промежутке, а в реальном времени. Если NN не указано, то свойство не обновляется.

Далее, для подписки на событие обновления свойства и использовании его в своём интерфейсе, можно использовать такую конструкцию:

Код: Выделить всё

%switch1.status|0%
<script language="javascript">
 $.subscribe('switch1.status.updated',function (_, value) {
  alert('New value: '+value);
 });
</script>
т.е. функция $.subscribe с параметром названиесвойства.updated (выше в примере switch1.status.updated).
Важны два момента: во-первых, в коде обязательно должна быть конструкция типа %switch1.status|NN% -- она создаёт событие, на которое можно подписаться (NN в вышеуказанном примере равно 0, но оно может быть любым числом). Причём, эта конструкция может быть даже закомментирована, чтобы не отображаться, например так:

Код: Выделить всё

<!-- %switch1.status|0% --> 
Во-вторых, имя для подписки на событие используется название объекта/свойства в нижнем регистре. Т.е. вы можете вставлять %Switch1.Status|0%, но подписываться нужно на switch1.status.updated

Собственно, у меня пока всё :)
За это сообщение автора sergejey поблагодарили (всего 8):
Alien (Вт окт 20, 2015 9:33 pm) • dmw (Ср окт 21, 2015 1:47 pm) • coolermister (Ср окт 21, 2015 10:56 pm) • ErmolenkoM (Пт окт 23, 2015 2:59 pm) • Silowar (Вт окт 27, 2015 1:14 pm) • Anton_kulibin (Ср дек 09, 2015 6:56 pm) • AkaSoni (Пн май 24, 2021 2:32 pm) • Bagir (Чт авг 11, 2022 7:43 pm)
Рейтинг: 9.3%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
kostya77
Сообщения: 136
Зарегистрирован: Вт ноя 12, 2013 8:29 pm
Благодарил (а): 2 раза
Поблагодарили: 8 раз

Re: Поддержка websockets

Сообщение kostya77 » Вт окт 20, 2015 4:34 pm

Алиса стоит на Убунте 12 .
После обновления левая панель ( меню управления ) пропала ... просто белое место .
Это только у меня так ?
Кто обновлял Алису установленную на ПК ? у вас все нора ?
Последний раз редактировалось kostya77 Вт окт 20, 2015 9:31 pm, всего редактировалось 1 раз.
f00fc7c8
Сообщения: 55
Зарегистрирован: Пт ноя 01, 2013 3:15 am
Благодарил (а): 3 раза
Поблагодарили: 11 раз

Re: Поддержка websockets

Сообщение f00fc7c8 » Вт окт 20, 2015 4:54 pm

Обновил Raspberry Pi2, изменений не заметил.
lavstudia
Сообщения: 31
Зарегистрирован: Вт фев 04, 2014 9:29 am
Благодарил (а): 0
Поблагодарили: 4 раза

Re: Поддержка websockets

Сообщение lavstudia » Вт окт 20, 2015 6:10 pm

sergejey - Поздравляю! ;)
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Поддержка websockets

Сообщение sergejey » Вт окт 20, 2015 6:45 pm

lavstudia писал(а):sergejey - Поздравляю! ;)
Пока рано :)
Ловлю много багов и исправляю по ходу дела.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: Поддержка websockets

Сообщение Vovix » Вт окт 20, 2015 7:26 pm

sergejey писал(а):
lavstudia писал(а):sergejey - Поздравляю! ;)
Пока рано :)
Ловлю много багов и исправляю по ходу дела.
т.е. пока не обновлять?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Поддержка websockets

Сообщение Ivan » Вт окт 20, 2015 8:37 pm

Мои баги разбежались. Работает отлично. Обновляется моментально. (Учтите что ещё идёт тестирование)
Обязательно закрыть вкладку с МД. И открыть заново, по F5+Shift не работает WebSocket - если открыто до обновления

ПК хром ВИН10 - 100%

ПК ИЕ ВИН10 - 100%
ПК FireFox ВИН10 - 100%
ПК Opera ВИН10 - 100%

Планшет хром андроид - 100%
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
ILGAS
Сообщения: 366
Зарегистрирован: Пт июл 26, 2013 4:11 pm
Благодарил (а): 71 раз
Поблагодарили: 18 раз

Re: Поддержка websockets

Сообщение ILGAS » Вт окт 20, 2015 9:22 pm

после обновления не наблюдаю изменений
у меня даже не файла не цикл cycle_websockets не появилось
файл config.php не изменен.

зы. у меня что то с обновлением((
majordomo пишет что у меня последняя версия.
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

Re: Поддержка websockets

Сообщение Alien » Вт окт 20, 2015 9:33 pm

Скрипт изменения статуса датчика движения из камеры стал выдавать ошибку, раньше работал.
Код:
sg("sensorCC.status",1);
clearTimeOut("sensorCCStatusClear");
SetTimeOut('sensorCCStatusClear',"sg('sensorCC.status','0');", 60);

Ошибка:
Notice: Undefined offset: 0 in /var/www/html/modules/objects/objects.class.php on line 364
Notice: Undefined index: status in /var/www/html/modules/objects/objects.class.php(536) : eval()'d code on line 1

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

PS
В дебмесе шедулера нашел:
Warning: Not connected in /var/www/html/lib/websockets/client/lib/class.websocket_client.php on line 33
Ubuntu на Banana pi M2U Connect
pavelt
Сообщения: 43
Зарегистрирован: Ср июн 10, 2015 10:46 pm
Благодарил (а): 0
Поблагодарили: 6 раз

Re: Поддержка websockets

Сообщение pavelt » Ср окт 21, 2015 9:20 am

ILGAS писал(а):после обновления не наблюдаю изменений
у меня даже не файла не цикл cycle_websockets не появилось
файл config.php не изменен.

зы. у меня что то с обновлением((
majordomo пишет что у меня последняя версия.

Аналогично, такое впечатление, что обновления не происходит, а по факту пишет что последняя версия. У меня вообще нет каталога websockets/server. В каком логе посмотреть, что происходит во время обновления?

И еще вопрос попутно. "Под кнопкой обновить систему" у меня стоит какой-то флажок без описания. Может он какую роль играет?
Ответить