Links Relacionados

Links Relacionados

Existe uma maneira de implementar opadrão de publicação/assinaturada linha de comando sem usar um processo de servidor? Isso só precisa funcionar em uma máquina.

A principal coisa que quero evitar ao não ter um processo servidor é configurar uma máquina para usar essas ferramentas. Também estou bastante interessado em não ter que lidar com a possibilidade de o processo do meu servidor morrer.

Isso pode ser 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

  • IPC POSIXfornece um servidor sem servidorfila de mensagense existem clientes de linha de comando para isso(1) (2) (3). Isso poderia ser usado junto com algum tipo de armazenamento de estado para implementar o que foi dito acima.
  • ZMQFornece umaprotocolo para comunicação pub/sub. Existem ferramentas de linha de comando análogas anãopara usarZMQ, comozmcat. Eles podem ser usados ​​para configurar um padrão mínimo de publicação/assinatura de linha de comandocom um servidor.
  • O Linux fornece outro mecanismo IPC chamadopipes nomeados (cf mkfifo). Não sei qual é o comportamento pretendido com vários consumidores. Mas algumas experiências iniciais sugerem que cada mensagem é apenasrecebido por um dos consumidores

Responder1

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 monitorar quais dados os assinantes receberam. Isso torna o FIFO inútil para esse propósito. Ironicamente, um arquivo normal fará exatamente o que você deseja porque os descritores de arquivos em arquivos regulares controlam as alterações do arquivo. Você pode combinar isso com a substituição, 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.

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á na verdade fazendo tudo que read e echo fazem, mas está escrito assim porque presumo que você deseja incorporá-lo em um script.

informação relacionada