2

我们有类似于下面的代码来在机器和远程主机之间创建一个启用 SSL 的套接字来传输数据。我们注意到,每次调用 sock.send 时发送的数据量约为 16K。有没有办法配置这个?以 16K 的块发送 10 MB 的数据非常慢,我们可以将块大小配置为 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 回答