gpt4 book ai didi

cocoa - 在 Cocoa 中通过 TCP 发送大文件的最佳方式

转载 作者:可可西里 更新时间:2023-11-01 02:54:04 25 4
gpt4 key购买 nike

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

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

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

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

我正在为套接字使用 GCDAsyncSocket。

谢谢!

最佳答案

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

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

Posix 比 Cocoa 快,但相差不大。尝试在 ram 中缓冲 32mb block ,然后为整个 block 调用文件写入一次。 32mb 是文件系统缓存魔数(Magic Number)。为小块调用文件写入使用相当多的 CPU。

关于cocoa - 在 Cocoa 中通过 TCP 发送大文件的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35963371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com