有没有办法实现发布/订阅模式从命令行而不使用服务器进程?这只需要在一台机器上工作。
我想通过没有服务器进程来避免的主要事情是配置机器来使用这些工具。我也非常希望不必处理我的服务器进程死亡的可能性。
这可能看起来像:
# 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 所做的所有事情,但它是这样写的,因为我假设您想将它合并到脚本中。