2011-10-08 82 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

當然,但問題不是關於做它的可能性,而是關於優化它。 –