我有一个传入的视频流,我想设置多个进程来处理它,每个进程都在自己的地址上运行。读了一些资料后,似乎索卡特是实现此目的的一种方式
socat TCP4-LISTEN:1934,fork,reuseaddr TCP4:someaddress:1935
这会将所有内容转发到目标地址,但只允许我绑定一个目标。有没有办法用 socat 绑定多个目标地址?如果我尝试多次单独绑定,后续绑定时会收到“地址已在使用中”错误。我不会被迫使用 socat,如果有人知道更好的方法,任何可以让我复制传入流的东西都是好的。谢谢。
答案1
根据我之前的评论,我刚刚测试了这个解决方案[1],如果我理解您的需求,它可以按预期工作:
socat -u tcp4-listen:1934 - | tee >(socat - tcp4:127.0.0.1:1935) >(socat - tcp4:127.0.0.1:1936) > /dev/null
启动这个之前必须已经有进程在监听 1935 和 1936 否则右边socat
会抱怨。
这仍然是一个非常脆弱的解决方案。我建议尝试其他方法,例如临时缓存文件或管道。
[1] 像这样:
nc -l 127.0.0.1 1935
在壳里nc -l 127.0.0.1 1936
在另一个 shell 中- 在第三个 shell 中执行上述命令
- 第四个:
echo "foobar" | nc 127.0.0.1 1934
- 我确实在第一个和第二个 shell 的输出中看到了“foobar”。
答案2
您可以在您的目的地启动 socat 吗?
刚刚使用socat -d -d -b67108864 -U TCP4-LISTEN:65431,tcpwrap,tcpwrap-etc=.,reuseaddr,fork OPEN:filename
当前目录中的 hosts.allow 有一行:
socat: address address address address
-U 反转方向以便服务器进行监听。
socat TCP:server:65431 - |
.......... 到达目的地。