2011-10-08 13 views
6

Mam serwer C++, który działa jak lustro. Co dostaje się do innego gniazda. W tej chwili odczytuje gniazdo do bufora i zapisuje je w drugim gnieździe. Chcę poprawić przepustowość.Rura między gniazdami

Mam read stuff o sendfile() i splice(), ale wydaje się być ograniczone do transferów "plik do gniazda". Być może zadziała prosty pipe() między gniazdami. Co polecasz?

Przenośne rozwiązanie byłoby idealne, ale dobrze, jeśli jest to tylko system Linux.

+1

Może to być przydatne http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets- i-nie-po prostu-rurki – Arunmu

+0

Możliwe, że możesz użyć tego samego portu dla obu gniazdek! – Arunmu

+1

Jeszcze jedno łącze, które przesyła dane przez potok :): http://markmail.org/thread/4cils4zyoxtrq3zu – Arunmu

Odpowiedz

4

Możesz ustawić nazwaną potok w systemie Linux. Wiele procesów może odczytać/zapisać z tego. Sprawdź ten link: http://www.cs.fredonia.edu/zubairi/s2k2/csit431/more_pipes.html.

Ponadto, jak wspomniano powyżej, netcat powinien wystarczyć (http://netcat.sourceforge.net/).

+0

O ile mi wiadomo (zgodnie z plikiem źródłowym BSD), 'nc' używa bufora o rozmiarze 8192 bajtów, który w zasadzie jest obecnie moim rozwiązaniem. –

+0

Mogłabym rozważyć użycie nazwanego potoku i przetestować go, ale nawet jeśli plik FIFO jest oparty na pamięci RAM, nie widzę, jak może działać szybciej niż zwykła kopia pamięci. –

0

Sprawdziłem polecenie nc(netcat) jak wspomniano przez Ralu w swoim komentarzu i działa pomiędzy dwoma gniazdami, gdy używana z rurą :)

użyłem poniższego polecenia:

 

netcat -l 5556 | netcat localhost 5557 
 

wysłałem dane do port 5556 (klient python) skonfigurowany przez pierwsze polecenie nc i wykonał serwer (mały kod Pythona) nasłuchując na porcie 5557.

Mogłem odczytać dane z portu 5557

+0

Oczywiście, ale pytanie nie dotyczy możliwości zrobienia tego, ale jego optymalizacji_. –