我正在设计一种通过TCP数据包发送的协议,有时可以在iOS和OSX设备之间发送大型(视频)文件。我有三个问题:
1)为了获得良好性能,每个TCP数据包的最大大小是多少?即:接近65535并让TCP打破数据或尝试保持低于某个阈值更好。如果是后者,那该怎么办?
2)从文件读取数据缓冲区并通过TCP套接字发送的最低开销方式是什么?正如Cocoa中经常出现的情况一样,有很多方法: NSInputStream - NSFileHandle - POSIX文件句柄
3)将从TCP套接字接收的数据附加到文件的最低开销方式是什么?我们有: NSOutputStream - NSFileHandle - POSIX文件句柄
我正在使用GCDAsyncSocket作为套接字。
谢谢!
答案 0 :(得分:0)
我发现使用千兆交换机时,8k数据包可以提供最佳性能。 当交换机丢包时,较大的有效载荷大小受到影千兆交换机在全速率(过热?)后大约15分钟后往往不可靠
同样,TCP / IP接收器应将数据包发布到单独的异步线程/ gcd队列以进行文件写入。这有点违反直觉......它最大限度地减少了tcp窗口大小的增长。
Posix比可可更快,但不是很多。 尝试在ram中缓冲32mb块,然后为整个块调用一次文件写入。 32mb是文件系统缓存幻数。 为小块调用文件写入会占用相当大的cpu。