有没有办法在不使用服务器进程的情况下从命令行实现发布/订阅模式?这只需要在一台机器上工作。
我想通过没有服务器进程来避免的主要事情是配置一台机器来使用这些工具。我也非常希望不必处理我的服务器进程死亡的可能性。|
这可能类似于:
# 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
Run Code Online (Sandbox Code Playgroud)
所有订阅者都需要以不影响其他订阅者的方式收到新数据的通知,并且服务器不必跟踪订阅者收到的数据。这使得 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
Run Code Online (Sandbox Code Playgroud)
您将在标准错误上获得“文件被截断”,这是预期的行为,但如果您不想看到它,请添加 2> /dev/null
tail 实际上正在做 read 和 echo 做的所有事情,但它是这样写的,因为我假设你想把它合并到一个脚本中。