需要一些有关socket.recv行为的说明

用户名

我正在尝试编写一个IRC机器人,但我不确定数据接收的工作方式。我目前所拥有的:

while True:
    data = socket.recv(1024)

    #process data

假设无论出于何种原因,都需要花费更多时间来处理数据,如果那时发送了某些消息会怎样?它会在当前队列完成后被跳过或添加到某种队列中并进行处理吗?

s

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

TCP:

TCP RFC明确规定:

TCP为接收方提供了一种手段,可以控制发送方发送的数据量。这是通过返回带有每个ACK的“窗口”来实现的,该ACK表示成功接收的最后一段之后的可接受序列号范围。该窗口指示发送者在获得进一步许可之前可以传输的允许的八位位组数量。

同样来自维基百科的信息是相似的:

TCP使用端到端流控制协议来避免发送方发送数据的速度过快,以至于TCP接收方无法可靠地接收和处理数据。例如,如果PC将数据发送到正在缓慢处理接收到的数据的智能手机,则智能手机必须调节数据流,以免被淹没。TCP使用滑动窗口流控制协议。在每个TCP段中,接收方在接收窗口字段中指定它愿意为连接缓冲的其他接收数据量(以字节为单位)。在必须等待接收主机的确认和窗口更新之前,发送主机最多只能发送该数量的数据。

UDP

UDP没有像TCP那样的任何流控制机制。但是,还有另一种UDP实现,例如RUDP,它具有TCP的某些功能(如流控制)。

这是另一个有关TCP和UDP之间差异的有趣链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章