Publicação de linha de comando / sub sem servidor?

3

Existe uma maneira de implementar o padrão de publicação / assinatura na linha de comando sem usar um processo de servidor? Essa necessidade só funciona em uma máquina.

A principal coisa que eu quero evitar por não ter um processo de servidor é ter que configurar uma máquina para usar essas ferramentas. Eu 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

  • IPX POSIX fornece uma fila de mensagens sem servidor e existem clientes de linha de comando para < href="https://github.com/maandree/cmdipc"> (1) (2) < um href="https://github.com/twinshadow/qtools"> (3) . Isso pode ser usado em conjunto com algum tipo de armazenamento de estado para implementar o acima.
  • O ZMQ fornece um protocolo para publicação / subcomunicação . Existem ferramentas de linha de comando análogas a nc para usar ZMQ , como zmcat . Estes 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 (c.f. mkfifo) . Eu não sei qual é o comportamento pretendido com vários consumidores. Mas algumas experiências iniciais sugerem que cada mensagem é apenas recebida por um dos consumidores
por Att Righ 22.11.2017 / 20:21

1 resposta

4

Todos os assinantes precisam ser notificados sobre novos dados de uma maneira que não afete outros assinantes, e o servidor não deve ter que acompanhar os dados recebidos pelos assinantes. Isso torna o FIFO inútil para esse propósito. Ironicamente, um arquivo regular faz exatamente o que você quer, porque os descritores de arquivos em arquivos regulares controlam as alterações dos arquivos. Você pode combinar isso com sobrescrever, o que garante que todas as mudanças sejam publicadas antes que uma nova sobregravação ocorra, significando que você está apenas armazenando uma mensagem.

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

Você receberá "arquivo truncado" no erro padrão, que é o comportamento esperado, mas se você não quiser vê-lo, adicione 2 > / dev / null

tail está realmente fazendo tudo que lê e echo, mas é escrito assim porque eu suponho que você queira incorporá-lo em um script.

    
por 23.11.2017 / 00:01