套接字之间的管道

6
我有一个充当镜像的C++服务器。进入的内容会通过另一个套接字输出。现在,它将套接字读入缓冲区并写入到另一个套接字中。我想提高吞吐量。
我已经阅读了关于sendfile()splice()资料,但似乎仅适用于“文件到套接字”的传输。也许简单的套接字之间的pipe()会起作用。你有什么建议?
一个可移植的解决方案是完美的,但如果只能在Linux上运行也可以。

1
这可能会有所帮助 http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets-and-not-merely-pipes - Arunmu
也许你可以为两个套接字使用同一个端口! - Arunmu
1
又有一个通过管道传输数据的链接 :) : http://markmail.org/thread/4cils4zyoxtrq3zu - Arunmu
1
仅使用 #nc -l listen_port > destination 命令怎么样? - Luka Rahne
2个回答

4

据我所知(根据BSD源文件),nc使用8192字节的缓冲区,这基本上是我目前的解决方案。 - Warren Seine
我可能会考虑使用命名管道并对其进行基准测试,但即使FIFO文件是基于RAM的,我也看不出它如何比简单的内存复制更快。 - Warren Seine

1

我在评论中看到了Ralu提到的nc(netcat)命令,并尝试使用它在两个套接字之间进行管道传输,结果成功了 :)

我使用了以下命令:


netcat -l 5556 | netcat localhost 5557

我向第一个nc命令设置的端口5556(一个Python客户端)发送数据,并在端口5557上监听一个服务器(小型Python代码)。

我可以从端口5557接收数据。


当然可以,但问题不在于是否能够做到,而在于如何_优化它_。 - Warren Seine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接