2 votes

Augmenter la quantité de données envoyée dans un seul appel socket.send()

Nous avons un code similaire à celui ci-dessous pour créer un socket activé SSL entre une machine et un hôte distant pour transférer des données. Nous remarquons que la quantité de données envoyée à chaque appel à sock.send est d'environ 16K. Y a-t-il un moyen de configurer cela? Envoyer 10 Mo de données par morceaux de 16K est très lent, pouvons-nous configurer la taille des morceaux à environ 1-2 Mo?

from OpenSSL import SSL
import socket

''' Créer un contexte SSL.
ctx = ...

''' Créer un socket activé SSL.
sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))

''' Se connecter à l'hôte distant.
sock.connect((adresse_hôte, port))

''' msg est une grande chaîne d'environ 10 Mo.
msg = ... 

''' Envoyer des données sur le socket.
total_envoyé = 0
while (total_envoyé < len(msg)):
  envoyé = sock.send(msg[total_envoyé:])
  total_envoyé += envoyé

3voto

MRAB Points 9855

La méthode send ne garantit pas l'envoi de tous les octets, mais la méthode sendall le fait. Cela évitera la découpe de la chaîne de caractères.

1voto

NPE Points 169956

Même si cela est possible, augmenter la taille du bloc de 16K à 1-2MB n'aura presque certainement aucun effet sur les performances. Le goulot d'étranglement probable est le débit de votre connexion TCP/IP (et l'MTU de votre réseau Ethernet est probablement autour de 1500 ou 9000 octets, donc tout est découpé en morceaux de cette taille de toute façon).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X