Есть ли способ реализоватьшаблон публикации/подпискииз командной строки без использования серверного процесса? Это должно работать только на одной машине.
Главное, чего я хочу избежать, не имея серверного процесса, — это необходимость настройки машины для использования этих инструментов. Я также очень хочу не иметь дела с возможностью смерти моего серверного процесса.|
Это может выглядеть примерно так:
# client 1
subscribe name | while read line; do echo $line; done
# client 2
subscribe name | while read line; do echo $line; done
# server
echo message | publish name
Ссылки по теме
- POSIX-IPC-протоколобеспечивает бессерверныйочередь сообщенийи для него есть клиенты командной строки(1) (2) (3). Это можно использовать вместе с каким-либо хранилищем состояний для реализации вышеизложенного.
- ЗМКобеспечиваетпротокол для связи pub/sub. Существуют инструменты командной строки, аналогичныенкдля использованияЗМК, такой какzmcat. Их можно использовать для настройки минимального шаблона pub/sub командной строки.с сервером.
- Linux предоставляет еще один механизм IPC, называемыйименованные каналы (cf mkfifo). Я не знаю, каково предполагаемое поведение с несколькими потребителями. Но некоторые начальные эксперименты показывают, что каждое сообщение толькополучено одним из потребителей
решение1
Все подписчики должны быть уведомлены о новых данных таким образом, чтобы это не повлияло на других подписчиков, и сервер не должен отслеживать, какие данные получили подписчики. Это делает FIFO бесполезным для этой цели. По иронии судьбы, обычный файл будет делать именно то, что вам нужно, потому что дескрипторы файлов в обычных файлах отслеживают изменения файлов. Вы можете объединить это с перезаписью, которая гарантирует, что все изменения будут опубликованы до того, как произойдет новая перезапись, то есть вы сохраняете только одно сообщение.
touch pubsub
tail -f pubsub | while read line; do echo $line; done
tail -f pubsub | while read line; do echo $line; done
echo "message" | cat > pubsub
Вы получите сообщение об ошибке «файл усечен» в стандартном потоке ошибок, что является ожидаемым поведением, но если вы не хотите этого видеть, добавьте 2> /dev/null
tail на самом деле делает все то же, что и read и echo, но так написано, потому что я предполагаю, что вы хотите включить это в скрипт.