2014-05-03 44 views
1

我正在尝试编写一个IRC机器人,但我不完全确定接收数据是如何工作的。我目前有:需要一些关于socket.recv行为的说明

while True: 
    data = socket.recv(1024) 

    #process data 

比方说,不管什么原因,它需要更多时间来处理数据,如果事情是在那个时候发会发生什么?它会被跳过或被添加到某种队列中并在当前队列完成后进行处理?

+1

如果使用TCP,它不会被跳过。如果数据发送速度比接收数据速度快,则TCP流量控制会减慢窗口大小,从而减慢或停止对等设备。读取TCP RFC。 –

回答

1

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

TCP:

TCP RFC明确指出:

TCP提供对接收机来管理由发送方发送的数据 的量的手段。这是通过返回一个“窗口”来实现的,每个ACK指示可接受的序列号范围超出 成功接收的最后一个段。该窗口指示 允许的发送者可以在 接收进一步权限之前传输的八位位组数。

另外从wikipedia的信息是相似的:

TCP使用的端至端的流量控制协议,以避免具有 发送者发送数据太快的TCP接收机接收和处理 它可靠。例如,如果PC向缓慢处理接收到的数据的智能手机发送数据,则智能手机必须调整数据流以免不堪重负。 TCP使用滑动窗口流程控制协议。在每个TCP段中,接收方在接收窗口字段中指定它愿意为连接缓冲的附加接收数据量(在 字节中)。主机只能在发送 必须等待 来自接收主机的确认和窗口更新之前发送最多数量的数据。

UDP

UDP没有任何流控制机制如TCP。然而,UDP的其他实现例如RUDP具有TCP流量控制的某些功能。

这里有一个其他有趣的link的TCP & UDP之间的区别。