1

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

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

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

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

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

谢谢!

4

1 回答 1

0

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

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

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

于 2016-03-13T22:30:33.397 回答