2

データを転送するためにマシンとリモートホストの間にSSL対応のソケットを作成するための以下のようなコードがあります。sock.sendへの各呼び出しで送信されるデータの量は約16Kであることがわかります。これを構成する方法はありますか?10MBのデータを16Kチャンクで送信するのは非常に遅いですが、チャンクサイズを約1〜2 MBに構成できますか?

from OpenSSL import SSL
import socket

''' Create SSL context.
ctx = ...

''' Create SSL enabled socket.
sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))

''' Connect to the remote host.
sock.connect((host_address, port))

''' msg is a large string about 10 MB.
msg = ... 

''' Send data over the socket.
total_sent = 0
while (total_sent < len(msg)):
  sent = sock.send(msg[total_sent:])
  total_sent += sent
4

2 に答える 2

3

このsendメソッドはすべてのバイトを送信することを保証しませんが、sendallメソッドは送信します。これにより、文字列のスライスが回避されます。

于 2012-01-17T20:35:10.770 に答える
1

ブロック サイズを 16K から 1 ~ 2MB に増やすことができたとしても、ほぼ確実にパフォーマンスに影響はありません。ボトルネックになる可能性があるのは、TCP/IP 接続のスループットです (イーサネット ネットワークのMTUはおそらく 1500 バイトか 9000 バイト程度なので、すべてがそのサイズの断片に分割されます)。

于 2012-01-17T20:06:02.147 に答える