试图了解 Python 套接字模块中的缓冲
Trying to understand buffering in Python socket module
我正在尝试了解套接字模块的工作原理,但我有一个愚蠢的问题:
socket.send()
发送的数据在被socket.recv()
清除之前存储在哪里?。
我相信中间某处一定有一个缓冲区等待 socket.recv() 调用以提取此数据。
我刚刚用一个一次发送大量数据的服务器进行了测试,然后连接到一个(有意)非常缓慢地提取数据的客户端。最终结果是数据在几分之一秒内发送,而另一方面,数据以 10 字节的小块.recv(10)
的形式全部接收,耗时 20 秒。
同时这些数据存储在哪里??,这个缓冲区的默认大小是多少?,如何访问和修改?
谢谢。
了解 OSI 层和不同的连接,例如 TCP 和 UDP。 socket.send
实现了一个TCP传输数据。如果查看 OSI 层,您会发现第 4 层(即传输层)将缓冲要传输的数据。缓冲区的默认大小取决于实现。
OS(内核)缓冲数据。
在 Linux 上,可以通过 /proc 接口访问缓冲区大小参数。有关更多详细信息,请参阅 man 7 socket
(接近尾声。)
我正在尝试了解套接字模块的工作原理,但我有一个愚蠢的问题:
socket.send()
发送的数据在被socket.recv()
清除之前存储在哪里?。
我相信中间某处一定有一个缓冲区等待 socket.recv() 调用以提取此数据。
我刚刚用一个一次发送大量数据的服务器进行了测试,然后连接到一个(有意)非常缓慢地提取数据的客户端。最终结果是数据在几分之一秒内发送,而另一方面,数据以 10 字节的小块.recv(10)
的形式全部接收,耗时 20 秒。
同时这些数据存储在哪里??,这个缓冲区的默认大小是多少?,如何访问和修改?
谢谢。
了解 OSI 层和不同的连接,例如 TCP 和 UDP。 socket.send
实现了一个TCP传输数据。如果查看 OSI 层,您会发现第 4 层(即传输层)将缓冲要传输的数据。缓冲区的默认大小取决于实现。
OS(内核)缓冲数据。
在 Linux 上,可以通过 /proc 接口访问缓冲区大小参数。有关更多详细信息,请参阅 man 7 socket
(接近尾声。)