我正在尝试编写一个IRC机器人,但我并不完全确定数据的接收是如何工作的。我目前有什么:
while True:
data = socket.recv(1024)
#process data
让我们说无论出于何种原因,它需要更多时间来处理数据,如果当时发送了什么会发生什么?它会被跳过或被添加到某种队列中并在当前队列完成后进行处理吗?
答案 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。