我有一台充当镜像的C++服务器。进入的内容出现在不同的套接字上。现在,它将套接字读入缓冲区并将其写入另一个套接字中。我想提高吞吐量。插座之间的管道
我read stuff约sendfile()
和splice()
,但它似乎仅限于“文件到套接字”传输。也许插座之间的一个简单的pipe()
将工作。你有什么建议?
便携式解决方案将是完美的,但如果仅限于Linux,那很好。
我有一台充当镜像的C++服务器。进入的内容出现在不同的套接字上。现在,它将套接字读入缓冲区并将其写入另一个套接字中。我想提高吞吐量。插座之间的管道
我read stuff约sendfile()
和splice()
,但它似乎仅限于“文件到套接字”传输。也许插座之间的一个简单的pipe()
将工作。你有什么建议?
便携式解决方案将是完美的,但如果仅限于Linux,那很好。
你可以在linux中设置一个命名管道。多个进程可以从中读取/写入。看看这个链接:http://www.cs.fredonia.edu/zubairi/s2k2/csit431/more_pipes.html。
也如上所述使用netcat应该做的伎俩(http://netcat.sourceforge.net/)。
据我所知(根据BSD源文件), 'nc'使用8192字节的缓冲区,这基本上是我目前的解决方案。 –
我可能会考虑使用命名管道并对其进行基准测试,但即使FIFO文件是基于RAM的,我也无法看到它如何比简单的内存复制更快。 –
我检查nc(netcat)
命令由Ralu
在他的评论中提及,并与管:)
我用下面的命令一起使用时它的工作原理两个插槽之间:
netcat -l 5556 | netcat localhost 5557
我发送数据到端口5556(一个python客户端)设置由所述第一NC指令和由服务器(小Python代码)监听端口5557.
我可以从端口5557接收数据
当然,但问题不是关于做它的可能性,而是关于优化它。 –
这可能有些用处http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets-而不仅仅是管道 – Arunmu
可能你可以使用相同的端口插座! – Arunmu
通过管道传输数据的另一个链接:) http://markmail.org/thread/4cils4zyoxtrq3zu – Arunmu