在Cocoa

时间:2016-03-12 21:11:30

标签: cocoa tcp nsinputstream nsfilehandle nsoutputstream

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

1)为了获得良好性能,每个TCP数据包的最大大小是多少?即:接近65535并让TCP打破数据或尝试保持低于某个阈值更好。如果是后者,那该怎么办?

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

Posix比可可更快,但不是很多。 尝试在ram中缓冲32mb块,然后为整个块调用一次文件写入。 32mb是文件系统缓存幻数。 为小块调用文件写入会占用相当大的cpu。