有没有一种方法可以在不使用服务器进程的情况下从命令行实现发布/订阅模式?这只需要在一台机器上工作。
通过没有服务器进程,我想避免的主要事情是配置机器以使用这些工具。我也非常热衷于不必处理我的服务器进程死亡的可能性。|
这可能看起来像:
# 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
相关链接
- POSIX ipc提供了一个无服务器消息队列,并且有它的命令行客户端(1) (2) (3)。这可以与某种状态存储一起使用来实现上述功能。
- ZMQ为 pub/sub 通信提供了一个协议。有类似于nc的命令行工具用于使用ZMQ,例如zmcat。这些可用于设置带有服务器的最小命令行 pub/sub 模式。
- Linux 提供了另一种 IPC 机制,称为命名管道 (cf mkfifo)。我不知道多个消费者的预期行为是什么。但一些初步实验表明,每条消息仅由其中一个消费者接收
所有订阅者都需要以不影响其他订阅者的方式通知新数据,并且服务器不必跟踪订阅者收到的数据。这使得 FIFO 无法用于此目的。具有讽刺意味的是,常规文件将完全按照您的意愿行事,因为常规文件上的文件描述符会跟踪文件更改。您可以将此与覆盖结合使用,以确保在发生新覆盖之前发布所有更改,这意味着您只存储一条消息。
您将在标准错误上获得“文件被截断”,这是预期的行为,但如果您不想看到它,请添加 2> /dev/null
tail 实际上是在做所有 read 和 echo 做的事情,但它是这样写的,因为我假设你想将它合并到一个脚本中。