2011-10-08 63 views
6

我有一台充当镜像的C++服务器。进入的内容出现在不同的套接字上。现在,它将套接字读入缓冲区并将其写入另一个套接字中。我想提高吞吐量。插座之间的管道

read stuffsendfile()splice(),但它似乎仅限于“文件到套接字”传输。也许插座之间的一个简单的pipe()将工作。你有什么建议?

便携式解决方案将是完美的,但如果仅限于Linux,那很好。

+1

这可能有些用处http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets-而不仅仅是管道 – Arunmu

+0

可能你可以使用相同的端口插座! – Arunmu

+1

通过管道传输数据的另一个链接:) http://markmail.org/thread/4cils4zyoxtrq3zu – Arunmu

回答

4

你可以在linux中设置一个命名管道。多个进程可以从中读取/写入。看看这个链接:http://www.cs.fredonia.edu/zubairi/s2k2/csit431/more_pipes.html

也如上所述使用netcat应该做的伎俩(http://netcat.sourceforge.net/)。

+0

据我所知(根据BSD源文件), 'nc'使用8192字节的缓冲区,这基本上是我目前的解决方案。 –

+0

我可能会考虑使用命名管道并对其进行基准测试,但即使FIFO文件是基于RAM的,我也无法看到它如何比简单的内存复制更快。 –

0

我检查nc(netcat)命令由Ralu在他的评论中提及,并与管:)

我用下面的命令一起使用时它的工作原理两个插槽之间:

 

netcat -l 5556 | netcat localhost 5557 
 

我发送数据到端口5556(一个python客户端)设置由所述第一NC指令和由服务器(小Python代码)监听端口5557.

我可以从端口5557接收数据

+0

当然,但问题不是关于做它的可能性,而是关于优化它。 –