2014-05-03 47 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之間的區別。