Python套接字:使用send()和recv()时有关网络缓冲区的问题

2021-10-17 16:59:04 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,当然,我已经阅读了相当多的时间,包括这个站点上的许多线程,但是我仍然需要一些关于套接字、TCP和Python网络的澄清,因为我觉得我不完全理解我的程序中发生了什么。你知道吗


我使用TCP(SOCK\ u流)通过Unix域套接字(AF\ Unix)将数据从服务器发送到客户机。你知道吗

在服务器端,一个进程不断地将项目放到排队。排队另一个进程是通过运行

while True:
    conn.sendall(queue.get())

在客户端,通过运行

while True:
    conn.recv(1024)
    # time.sleep(10)

现在,我通过在每次调用recv()之后将客户端进程发送到sleep来模拟慢速客户端。我所期望的是服务器端的队列已经满了,因为send()应该被阻塞,因为客户端读取数据的速度不够快。你知道吗

我监视发送到客户机的项目数以及队列大小。我注意到有几十条消息(大致取决于消息的大小,但稍有不同的消息大小可能表现相同)被发送到客户机(由于以下原因,客户机会延迟接收这些消息)时间.渗漏())在队列开始填满之前。你知道吗


这里发生了什么?为什么send()没有立即阻塞?你知道吗

我怀疑涉及到某种网络或文件缓冲区,它将发送项目排队,并在我实现的队列之前填满。你知道吗