代码之家  ›  专栏  ›  技术社区  ›  Andreu C.

尝试理解Python套接字模块中的缓冲

  •  0
  • Andreu C.  · 技术社区  · 10 年前

    我正在学习套接字模块是如何工作的,我有一个愚蠢的问题:

    在哪里 socket.send() 的发送数据在被清除之前存储 socket.recv() ?.

    我相信中间一定有一个缓冲区,等待socket.recv()调用来提取数据。

    我刚刚用一台服务器做了一个测试,它一次发送了大量数据,然后连接到一个客户端,该客户端(故意)非常缓慢地提取数据。最终的结果是,数据在一秒钟内发送,而在另一方面,它完全以10字节的小块形式接收 .recv(10) ,耗时20秒。

    同时,这些数据存储在何处??,此缓冲区的默认大小是多少?,如何访问和修改它?

    谢谢

    2 回复  |  直到 10 年前
        1
  •  0
  •   ErikR    10 年前

    OS(内核)缓冲数据。

    在Linux上,可以通过/proc接口访问缓冲区大小参数。看见 man 7 socket 了解更多详细信息(接近结尾)

        2
  •  0
  •   user823743    10 年前

    了解OSI层以及TCP和UDP等不同的连接。 socket.send 实现数据的TCP传输。如果您查看OSI层,您会发现第四层(即传输层)将缓冲要传输的数据。缓冲区的默认大小取决于实现。