Existe uma maneira de implementar o padrão de publicação/assinatura na linha de comando sem usar um processo do servidor? Isso só precisa funcionar em uma máquina.
A principal coisa que quero evitar por não ter um processo de servidor é configurar uma máquina para usar essas ferramentas. Também estou bastante interessado em não ter que lidar com a possibilidade de meu processo de servidor morrer.|
Isso pode parecer algo como:
# 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
Links Relacionados
- POSIX ipc fornece uma fila de mensagens sem servidor e há clientes de linha de comando para ela (1) (2) (3) . Isso pode ser usado junto com algum tipo de armazenamento de estado para implementar o acima.
- O ZMQ fornece um protocolo para comunicação pub/sub . Existem ferramentas de linha de comando análogas ao nc para usar ZMQ , como zmcat . Eles podem ser usados para configurar um padrão pub/sub de linha de comando mínimo com um servidor .
- O Linux fornece outro mecanismo IPC chamado pipes nomeados (cf. mkfifo) . Não sei qual é o comportamento pretendido com vários consumidores. Mas algumas experiências iniciais sugerem que cada mensagem é recebida apenas por um dos consumidores
Todos os assinantes precisam ser notificados sobre novos dados de uma forma que não afete outros assinantes e o servidor não deve ter que acompanhar quais dados os assinantes receberam. Isso torna o FIFO inútil para esse propósito. Ironicamente, um arquivo regular fará exatamente o que você deseja porque os descritores de arquivo em arquivos regulares acompanham as alterações do arquivo. Você pode combinar isso com a substituição, que garante que todas as alterações sejam publicadas antes que ocorra uma nova substituição, o que significa que você está armazenando apenas uma mensagem.
Você obterá "arquivo truncado" no erro padrão, que é o comportamento esperado, mas se não quiser vê-lo, adicione 2> /dev/null
tail está realmente fazendo tudo que read e echo fazem, mas é escrito assim porque presumo que você queira incorporá-lo em um script.