增加单个socket.send()调用中发送的数据量

时间:2012-01-17 20:02:07

标签: python pyopenssl

我们有类似于下面的代码,在机器和远程主机之间创建一个启用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

2 个答案:

答案 0 :(得分:3)

send方法并不保证发送所有字节,但sendall方法可以。这将避免字符串切片。

答案 1 :(得分:1)

即使可以做到,将块大小从16K增加到1-2MB几乎肯定对性能没有影响。可能的瓶颈是TCP / IP连接的吞吐量(并且以太网网络的MTU可能大约为1500或9000字节,因此无论如何所有内容都会被切割成碎片。)