Описание объектов службы PPS и их атрибутов
Служба PPS в составе ЗОСРВ «Нейтрино» работает с объектами, свойства которых могут изменяться издателями. Клиенты, которые подписываются на объект, получают уведомления, когда издатель изменяет его.
Служба PPS позволяет пользователям:
Дополнительную информацию о публикации и подписке см. в главах Публикация и Подписка.
![]() | С точки зрения архитектуры служба PPS ЗОСРВ «Нейтрино» схожа со многими системами управления, в которых объекты представляют собой контрольные значения, изменяемые программно или аппаратно. В качестве подписчиков могут выступать программы, которые реагируют на аварийные сигналы, дисплеи и др. |
Содержание статьи:
Объекты представляют собой файлы, которые размещаются в специальной файловой системе службы PPS. По умолчанию объекты PPS располагаются в каталоге /pps
. Эти объекты содержат в себе атрибуты.
Поскольку каждый объект PPS может существовать только в единственном экземпляре, объекты можно легко хранить в ПЗУ.
Представление объектов PPS в виде файлов позволяет:
Примеры:
ls -lR /pps/
lcat /pps/media/PlayCurrent cat /pps/apps/youtube
.all
для наблюдения за всеми изменениями атрибутов объектов, которые находятся в каталоге media
:
lcat /pps/media/.all?wait
Дополнительную информацию о специальном объекте .all
см. в разделе "Специальные объекты" далее в этой главе, а о параметре ?wait — в главе Параметры и спецификаторы.
lecho "attr::value" >>/pps/objectfilename
![]() | Во избежание неполадок и конфликтов при интеграции приложений из различных организаций в одну файловую систему PPS рекомендуется создавать в каталоге PPS подкаталог с именем, соответствующим веб-домену вашей организации. Например, компания «СВД Встраиваемые Системы» с доменом "kpda.ru" может использовать каталог /pps/kpda . |
Поскольку объекты службы PPS размещаются в памяти, они имеют небольшой размер:
Количество каталогов и объектов PPS ограничено только объемом доступной памяти, а уровень вложенности каталогов службы PPS — максимальной длиной путевых имен в файловой системе, которая используется для хранения файлов-объектов.
![]() |
|
В каталогах службы PPS могут находиться специальные объекты, которые можно открывать для управления механизмом подписки. Эти объекты перечислены в следующей таблице:
Объект | Применение |
---|---|
.all | Позволяет получать уведомления об изменениях всех объектов соответствующего каталога. |
.notify | Открывает дескриптор файла уведомлений в корневом каталоге файловой системы PPS. |
.server | Когда клиент открывает этот объект, создается его уникальный «экземпляр» или «канал», который виден только этому клиенту. |
Дополнительную информацию см. в разделе Подписка.
Первая строка объекта содержит его имя и начинается с символа "@". В последующих строках определяются атрибуты объекта без использования специального префикса.
Например, в каталоге /pps/media/
файловой системы PPS объект "PlayCurrent" содержит метаданные песни, которая воспроизводится в мультимедийном приложении в текущий момент. Допустим, что эти метаданные соответствуют следующей схеме:
@PlayCurrentauthor::[автор композиции]album::[название альбома]title::[название композиции]duration::[продолжительность композиции в секундах (вещественное число)]time::[текущее положение в композиции в секундах (вещественное число)]
При открытии и чтении этого файла с помощью функций open() с последующим вызовом read() возвращается имя объекта (имя файла с префиксом "@") и атрибуты объекта с их значениями:
@PlayCurrentauthor::Beatlesalbum::Abbey Roadtitle::Come Togetherduration::3.45time::1.24
![]() |
|
Объекты PPS не отмечаются какими-либо специальными идентификаторами в списках файлов файловой системы PPS. Другими словами, они выглядят как обычные файлы. Например, объект "PlayCurrent" в описанном выше примере отображается как /pps/media/PlayCurrent
.
Служба PPS сообщает издателям и подписчикам о создании, удалении и усечении объекта (файла или каталога). При выполнении этих действий она помещает строку уведомления в очередь каждого подписчика или публикатора, который открыл соответствующий объект или специальный объект .all в каталоге, где находится измененный объект.
Синтаксис строки уведомления включает в себя специальный символьный префикс, идентификатор объекта "@" и имя объекта:
Символ | Пример | Смысл |
---|---|---|
"+" | "+@objectname" | Служба PPS создала объект. Чтобы определить тип созданного объекта (файл или каталог), следует вызвать функцию stat() или fstat(). |
"-" | "-@objectname" | Служба PPS удалила объект. |
"#" | "#@objectname" | Служба PPS выполнила усечение объекта. |
"*" | "*@objectname" | Объект утратил критически важного подписчика. Все непостоянные атрибуты удалены. Дополнительную информацию см. в главе Параметры открытия путевых имен. |
Удаленный объект перестает быть видимым в файловой системе (в соответствии с требованиями стандарта POSIX), и только процессы, в которых он открыт, могут продолжать использовать его. Когда приложение получает уведомление об удалении объекта, оно обычно закрывает соответствующий файл.
Объекты PPS включают в себя атрибуты, которые определяются пользователем и отображаются в объекте после его имени.
Имена атрибутов могут состоять из букв, цифр, символов нижнего подчеркивания и точек, но должны начинаться с буквы или нижнего подчеркивания. Строки атрибутов в файле объекта PPS имеют формат "attrname:encoding:value\n", где поле "attrname" задает имя атрибута, а "encoding" — тип кодировки поля "value". Имя атрибута и кодировка завершаются двоеточием (":"), последующие двоеточия игнорируются.
Служба PPS не интерпретирует кодировку, а передает ее от издателя к подписчику, позволяя им определять собственные произвольные кодировки. Возможные типы кодировок перечислены в следующей таблице:
Символ | Кодировка |
---|---|
"::" | Обычный текст, который заканчивается символом перевода строки |
":c:" | Управляющие последовательности языка C (например, "\t" и "\n"). Обратите внимание, что в этой кодировке последовательности "\n" и "\t" состоят из двух символов — "\" и "n" или "t"; в строке C они имеют вид "\\n\\t" |
":b64:" | Кодировка Base64. |
Значение атрибута может состоять из любых символов, кроме следующих:
0x00
) 0x0A
).
Предыдущий раздел: Устойчивая служба публикации/подписки (PPS)