Je suis en train de développer un programme de type FTP pour télécharger un grand nombre de petits fichiers sur un kit de développement Xbox 360 (qui utilise Winsock) et le porter sur Playstation3 (également un kit de développement). AUTANT QUE JE SACHE). Le programme utilise des sockets de style BSD (TCP). Les deux programmes communiquent avec le même serveur, en téléchargeant les mêmes données. Le programme itère sur tous les fichiers dans une boucle comme ceci:Différence entre sockets winsock et linux
for each file send(retrieve command) send(filename) receive(response) test response receive(size) receive(data)
sur la mise en œuvre Xbox 360, l'ensemble prend le téléchargement 01h27 et le temps écoulé entre le dernier envoi et première réception prend environ 14 secondes. Cela me semble assez raisonnable.
L'implémentation de Playstation3 nécessite 4:01 pour les mêmes données. Le goulot d'étranglement semble être entre le dernier envoi et le premier reçu, ce qui prend jusqu'à 3h43 de ce temps. Les temps de réseau et de disque sont tous les deux significativement inférieurs à la Xbox 360.
Ces deux devkits sont sur le même commutateur que mon PC, qui sert le service de fichier, et il n'y a aucun autre trafic sur ledit commutateur.
J'ai essayé de définir le drapeau TCP_NODELAY
, ce qui n'a pas changé les choses de manière significative. J'ai également essayé de régler le SO_SNDBUF
/SO_RCVBUF
à 625KB, ce qui n'a pas non plus affecté de manière significative l'heure. Je suppose que la différence réside entre les implémentations de pile TCP/IP entre Winsock et Linux; Y at-il une option de socket que je pourrais définir pour que l'implémentation de Linux se comporte plus comme Winsock? Y at-il autre chose que je ne comptabilise pas?
La seule solution semble être de le réécrire afin qu'il envoie toutes les demandes de fichiers ensemble, puis les reçoit toutes.
Malheureusement, l'implémentation de Sony n'a pas l'option TCP_CORK, donc je ne peux pas dire si c'est la différence.
Quel mode FTP utilisez-vous, passif ou actif? En outre, vous dites "le temps entre le dernier envoi et la première réception prend environ 14 secondes, ce qui me semble tout à fait raisonnable." Je suis surpris qu'attendre 14 secondes pour une réponse à une commande RETR est raisonnable, surtout quand il est plus long pour la PS3. – Alexander