需要澄清一下socket.recv的行为方式

时间:2014-05-03 09:23:54

标签: python sockets

我正在尝试编写一个IRC机器人,但我并不完全确定数据的接收是如何工作的。我目前有什么:

while True:
    data = socket.recv(1024)

    #process data

让我们说无论出于何种原因,它需要更多时间来处理数据,如果当时发送了什么会发生什么?它会被跳过或被添加到某种队列中并在当前队列完成后进行处理吗?

1 个答案:

答案 0 :(得分:1)

根据协议类型,行为会有所不同。

<强> TCP:

TCP RFC明确指出:

  

TCP为接收方提供了一种管理数据量的方法       发件人发送。这是通过返回一个&#34;窗口来实现的。同       每个ACK表示超出可接受序列号的范围       成功收到的最后一段。窗口显示一个       允许发送者之前可以传输的八位字节数       获得进一步许可。

同样来自wikipedia的信息类似:

  

TCP使用端到端流量控制协议来避免使用   发送方发送数据的速度太快,TCP接收方无法接收和处理   它可靠。例如,如果PC将数据发送到智能手机   慢慢处理收到的数据,智能手机必须调节数据   流动,以免被淹没。 TCP使用滑动窗口流   控制协议。在每个TCP段中,接收器指定在   接收窗口字段另外接收的数据量(in   它愿意为连接缓冲。发送   主机只能等待之前才能发送最大量的数据   来自接收主机的确认和窗口更新。

UDP

UDP没有任何流量控制机制作为TCP。然而,还有一个UDP的其他实现,如RUDP,它具有TCP的一些功能,如流量控制。

对于TCP和&amp;之间的差异,这是另一个有趣的link。 UDP。