5

在我正在开发的应用程序中,我splice在 Linux 上用于套接字到套接字的数据传输。

  1. 其他操作系统(特别是 Windows、OS X 和 FreeBSD)是否实施splice或等效的解决方案?
  2. 是否可以使用¹ + ¹splice在 Windows 上模拟套接字到套接字的数据?sendfilememmap

¹ 两者都以不同的名称存在于 Windows 上,我不记得了。


更新

您可以看到spliceLinux 上 vs 用户空间缓冲区的性能改进。

去

  • DF, DR, F, MF,MR是我在不同隧道模式下的应用程序,NX是 NGINX Web 服务器
  • -p+t使用 Linux 系统调用splice
  • +p-t使用带有用户空间缓冲区的可移植实现
  • +p+t使用具有用户空间缓冲区和多个操作系统线程的可移植实现
  • 条形图表示每秒千兆字节的吞吐量
  • 一个 1 GB(1048576000 字节)的文件被 4 个并发客户端请求了 4 次
4

2 回答 2

1

OpenBSD 有sosplicesomovehttp ://www.openbsd.org/cgi-bin/man.cgi?query=sosplice

于 2013-05-02T03:51:08.917 回答
0

想到TransmitFile是winsock中从一个文件句柄流式传输到套接字的一种方式,但我不确定这是否会对您有所帮助,因为它用于从文件->磁盘流式传输。您可能可以将它与内存映射文件句柄一起使用。

过去我听过一些人将“内核模式”作为加快某些回显和简单服务器操作的方式,但我从未这样做过。

内核模式winsock的一些链接:

http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx

于 2012-09-02T01:34:37.540 回答