先說我對socket資料傳輸的理解
1、當我們呼叫send函式時,資料并不是真實的發送到了另一段,而是寫入到發送緩沖區,socket協議自己會決定如何把訊息發送出去
2、當我們呼叫recv函式時,并不是從另一臺電腦那接收資料,而是從接識訓沖區內讀取已經到達的資料
3、一般來說,發送緩沖區和接識訓沖區是64K大小
基于以上的知識,我最近觀察到的一個現象讓我無法理解,事情是這樣的:
1、 我用node.js寫了一個http服務器,用于提供檔案的下載,部署到我的A電腦上
2、 我在B電腦上部署了一個下載檔案的程式進行檔案的下載操作,兩臺電腦在同一個局域網內
3、 當B電腦上的程式發起一個50M大小的檔案下載請求后,http服務器提供下載服務,但是這個時候我發現http服務端的程式已經運行結束了,所謂運行結束是指res.end()已經被執行了,這意味著服務端的作業已經結束了,可是B電腦上的下載程式卻還在緩慢的運行著。
下面事情里這三點和上面對socket資料傳輸的三點理解是沖突的。http是基于tcp,也就是最底層是socket,一端把50M資料都發送完了,而另一段卻還接收完,服務器那邊完成下載服務時,B電腦上才接收了幾個M的資料。可發送緩沖區和接識訓沖區加在一起也就128K,那么那至少40M的資料哪里去了?
難道都在傳輸的路上么?
請大神指點
uj5u.com熱心網友回復:
你最好把主要的發送和下載代碼貼出來,有可能是代碼出了問題轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/150932.html
標籤:網絡通信
下一篇:資料庫被黑預防
