我有一个不定期运行的输出字符串的程序,我需要将该输出发送到某种套接字,该套接字可以从docker容器中分发出去,并且可以被多个监听器监听,甚至可以不监听任何监听器。
我知道标准 FIFO 命名管道,但它需要有一个监听器和通知器连接,直到它保持阻塞状态。
有没有办法使用“标准”Linux 命令或守护进程来获取这种类型的套接字?我正在寻找依赖项最少、易于维护的解决方案...
编辑:
我发现 socat 可以以这种方式工作,但我无法与所有客户端共享消息。
shell1$ socat pipe:/tmp/test-in unix-listen:/tmp/test-out,fork
shell2$ socat - UNIX-CONNECT:/tmp/test-out
shell3$ socat - UNIX-CONNECT:/tmp/test-out
shell4$ echo "test" > socat - UNIX-CONNECT:/tmp/test-in
(shell2) test
答案1
在类似答案中找到解决方案https://unix.stackexchange.com/questions/195880/socat-duplicate-stdin-to-each-connected-client。Socat 似乎无法以这种方式工作,但 nmap 包中的 ncat 可以。
对于 unix 套接字,它的工作原理相同:
% mkfifo /tmp/messages-in
% exec 8<>/tmp/messages-in # hold the fifo open
% ncat -l -U /tmp/messages-out -k --send-only < /tmp/messages-in
% echo "test" > /tmp/messages-in
% # every client connected to /tmp/messages-out will get "test" message