2011-10-08 41 views
6

Tôi có một máy chủ C++ hoạt động như một tấm gương. Những gì được vào được ra đến một ổ cắm khác nhau. Ngay bây giờ, nó đọc ổ cắm vào một bộ đệm và ghi nó vào ổ cắm khác. Tôi muốn cải thiện thông lượng.Đường ống giữa các ổ cắm

Tôi đã read stuff về sendfile()splice(), nhưng có vẻ như bị giới hạn đối với chuyển "tập tin sang ổ cắm". Có lẽ một đơn giản pipe() giữa các ổ cắm sẽ hoạt động. Bạn đề xuất món gì?

Giải pháp di động sẽ hoàn hảo, nhưng sẽ tốt nếu chỉ có Linux.

+1

Đây có thể là một số sử dụng http://unix.stackexchange.com/questions/9593/can-splice-tee-be-made-to-work-with-sockets- và không chỉ đơn thuần là ống dẫn – Arunmu

+0

Có thể bạn có thể sử dụng cùng một cổng cho cả hai ổ cắm! – Arunmu

+1

Một liên kết khác chuyển dữ liệu qua đường ống :): http://markmail.org/thread/4cils4zyoxtrq3zu – Arunmu

Trả lời

4

Bạn có thể thiết lập một đường ống có tên trong linux. Nhiều quy trình có thể đọc/ghi từ điều này. Kiểm tra liên kết này: http://www.cs.fredonia.edu/zubairi/s2k2/csit431/more_pipes.html.

Cũng như đã đề cập ở trên sử dụng netcat nên thực hiện thủ thuật (http://netcat.sourceforge.net/).

+0

Theo như tôi biết (theo tệp nguồn BSD), 'nc' sử dụng một bộ đệm gồm 8192 byte, đây là giải pháp cơ bản của tôi vào lúc này. –

+0

Tôi có thể xem xét sử dụng một ống có tên và chuẩn nó, nhưng ngay cả khi các tập tin FIFO là dựa trên RAM, tôi không thể nhìn thấy nó có thể đi nhanh hơn một bản sao bộ nhớ đơn giản. –

0

Tôi đã kiểm tra nc(netcat) lệnh như đã đề cập bởi Ralu trong bình luận của ông và nó hoạt động giữa hai ổ cắm khi sử dụng với ống :)

tôi đã sử dụng lệnh dưới đây:

 

netcat -l 5556 | netcat localhost 5557 
 

tôi đã gửi dữ liệu đến cổng 5556 (máy khách python) được thiết lập bởi lệnh nc đầu tiên và tạo một máy chủ (mã python nhỏ) nghe trên cổng 5557.

Tôi có thể recv dữ liệu từ cổng 5557

+0

Chắc chắn, nhưng câu hỏi không phải là về khả năng thực hiện nó, đó là về việc _optimizing it_. –

Các vấn đề liên quan