Поддержка websockets

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

Модератор: immortal

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

Поддержка websockets

Сообщение sergejey »

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

Итак, небольшой "ликбез". Технология 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

Собственно, у меня пока всё :)

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

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

Сообщение kostya77 »

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

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

Сообщение f00fc7c8 »

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

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

Сообщение lavstudia »

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

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

Сообщение sergejey »

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

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

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

Сообщение Vovix »

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

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

Сообщение Ivan »

Мои баги разбежались. Работает отлично. Обновляется моментально. (Учтите что ещё идёт тестирование)
Обязательно закрыть вкладку с МД. И открыть заново, по 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

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

Сообщение ILGAS »

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

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

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

Сообщение Alien »

Скрипт изменения статуса датчика движения из камеры стал выдавать ошибку, раньше работал.
Код:
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

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

Сообщение pavelt »

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

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

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

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