【问题标题】:Pipe between sockets插座之间的管道
【发布时间】:2011-12-03 14:24:15
【问题描述】:

我有一个充当镜像的 C++ 服务器。进来的东西会输出到不同的插座。现在,它将套接字读入缓冲区并将其写入另一个套接字。我想提高吞吐量。

我有 read stuff 关于 sendfile()splice(),但它似乎仅限于“文件到套接字”传输。也许套接字之间的简单pipe() 会起作用。你有什么推荐的?

一个可移植的解决方案是完美的,但如果它是仅限 Linux 的就很好。

【问题讨论】:

标签: c++ c sockets copy pipe


【解决方案1】:

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

如上所述,使用 netcat 应该可以解决问题 (http://netcat.sourceforge.net/)。

【讨论】:

  • 据我所知(根据一个 BSD 源文件),nc 使用 8192 字节的缓冲区,这基本上是我目前的解决方案。
  • 我可能会考虑使用命名管道并对其进行基准测试,但即使 FIFO 文件是基于 RAM 的,我也看不出它比简单的内存副本更快。
【解决方案2】:

我检查了Ralu 在他的评论中提到的nc(netcat) 命令,它在与管道一起使用时在两个套接字之间工作:)

我使用了以下命令:

netcat -l 5556 | netcat localhost 5557 我将数据发送到由第一个 nc 命令设置的端口 5556(python 客户端),并让服务器(小 python 代码)监听端口 5557。

我可以从端口 5557 接收数据

【讨论】:

  • 当然可以,但问题不在于这样做的可能性,而在于优化它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2013-05-01
  • 2018-03-08
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
相关资源
最近更新 更多