相关链接

相关链接

有没有办法实现发布/订阅模式从命令行而不使用服务器进程?这只需要在一台机器上工作。

我想通过没有服务器进程来避免的主要事情是配置机器来使用这些工具。我也非常希望不必处理我的服务器进程死亡的可能性。

这可能看起来像:

# 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

相关链接

答案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 所做的所有事情,但它是这样写的,因为我假设您想将它合并到脚本中。

相关内容