2016-03-12 4 views
1

Je suis en train d'élaborer un protocole à envoyer via des paquets TCP qui peuvent parfois envoyer de gros fichiers (vidéo) entre des périphériques iOS et OSX. J'ai trois questions:Meilleur moyen d'envoyer des fichiers volumineux via TCP dans Cocoa

1) Quelle est la taille maximale de chaque paquet TCP pour de bonnes performances? C'est à dire: vaut-il mieux se rapprocher de 65535 et laisser TCP briser les données, ou essayer de rester en dessous d'un certain seuil. Si ce dernier, quoi?

2) Quel est le moyen le plus bas de lire les tampons de données à partir d'un fichier et de les envoyer via le socket TCP? Comme cela est souvent le cas à Cocoa, il y a plusieurs façons: nsInputStream - NSFileHandle - fichier Posix poignée

3) Quel est le moyen le plus bas frais généraux de annexant les données reçues du socket TCP vers un fichier ? Nous avons: NSOutputStream - NSFileHandle - poignée fichier Posix

J'utilise GCDAsyncSocket pour les prises de courant.

Merci!

Répondre

0

J'ai trouvé que les paquets 8k donnent des performances optimales lors de l'utilisation des commutateurs Gigabit. Des tailles de charge utile plus importantes sont affectées lorsque des commutateurs abandonnent des paquets. De même, le récepteur TCP/IP doit envoyer des paquets à une file d'attente asynchrone/gcd distincte pour l'écriture de fichier. C'est un peu contre-intuitif ... cela réduit la taille de la fenêtre tcp qui devient trop grande.

Le posix est plus rapide que le cacao, mais pas beaucoup. Essayez de mettre en mémoire tampon des blocs de 32 Mo dans le RAM, puis appelez le fichier d'écriture une fois pour le bloc entier. 32mb est le numéro magique du cache du système de fichiers. L'écriture de fichier appelant pour de petits morceaux utilise un processeur important.