socat 转发到多个地址

Shu*_*ams 6 linux multiplexing socat

我有一个传入的视频流,我想设置多个进程来处理它,每个进程都在自己的地址上运行。经过一些阅读后,似乎socat是一种方法来做到这一点

socat TCP4-LISTEN:1934,fork,reuseaddr TCP4:someaddress:1935 
Run Code Online (Sandbox Code Playgroud)

这会将所有内容转发到目标地址,但它只允许我绑定一个目标。有没有办法用socat绑定多个目标地址?如果我尝试多个单独的绑定,我会在后续绑定中收到“地址已在使用中”错误。我没有被迫使用 socat,如果有人知道更好的方法,任何可以让我复制传入流的东西都是好的。谢谢。

Pat*_*zek 5

根据我之前的评论,我刚刚测试了这个解决方案 [1] 并且它按预期工作,如果我理解你的需求:

socat -u tcp4-listen:1934 - | tee >(socat - tcp4:127.0.0.1:1935) >(socat - tcp4:127.0.0.1:1936) > /dev/null
Run Code Online (Sandbox Code Playgroud)

在启动之前,必须有进程已经在 1935 和 1936 上侦听,否则socat右边的会抱怨。

这仍然是一个非常脆弱的解决方案。我建议尝试替代路线,例如临时缓存文件或管道。

[1] 像这样:

  • nc -l 127.0.0.1 1935 在一个壳里
  • nc -l 127.0.0.1 1936 在另一个壳中
  • 上面第三个shell中的命令
  • 然后在第四个: echo "foobar" | nc 127.0.0.1 1934
  • 我确实在第一个和第二个 shell 的输出中看到了“foobar”。