【问题标题】:Best way to send large files via TCP in Cocoa在 Cocoa 中通过 TCP 发送大文件的最佳方式
【发布时间】:2016-03-12 21:11:30
【问题描述】:

我正在设计一种通过 TCP 数据包发送的协议,该协议有时可以在 iOS 和 OSX 设备之间发送大型(视频)文件。我有三个问题:

1) 每个 TCP 数据包的最大尺寸是多少才能获得良好的性能?即:接近65535并让TCP分解数据更好,还是尝试保持在某个阈值以下。如果是后者,是什么?

2) 从文件中读取数据缓冲区并通过 TCP 套接字发送的最低开销方式是什么?与 Cocoa 中的常见情况一样,有多种方法: NSInputStream - NSFileHandle - POSIX 文件句柄

3) 将从 TCP 套接字接收的数据附加到文件的最低开销方式是什么?我们有: NSOutputStream - NSFileHandle - POSIX 文件句柄

我正在使用 GCDAsyncSocket 作为套接字。

谢谢!

【问题讨论】:

    标签: cocoa tcp nsinputstream nsfilehandle nsoutputstream


    【解决方案1】:

    我发现使用千兆交换机时,8k 数据包可提供最佳性能。 当交换机丢弃数据包时,更大的有效负载大小会受到影响。千兆交换机在全速运行大约 15 分钟后往往会变得不可靠(过热?)

    同样,TCP/IP 接收器应将数据包发送到单独的异步线程/gcd 队列以进行文件写入。这有点违反直觉......它最大限度地减少了 tcp 窗口大小变得太大。

    Posix 比 cocoa 快,但快不了多少。 尝试在 ram 中缓冲 32mb 块,然后为整个块调用一次文件写入。 32mb 是文件系统缓存幻数。 为小块调用文件写入会占用大量 CPU。

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 2021-08-31
      • 2021-03-04
      • 1970-01-01
      • 2014-12-17
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多