[英]What happens when we do networkstream.write()?
我有2個程序。 1個服務器和1個客戶端。
在客戶端,它是這樣的:
while(statement)
{
networkstream.write(data);
}
在服務器中,它是這樣的:
while(statement)
{
while(statement)
{
ReceiveData;
}
Do other stuff;
}
因此,盡管客戶端可以真正快速地寫入網絡流,但是服務器仍必須先處理數據,然后才能讀取更多內容。
例如,當客戶端已經進行了4圈包含寫操作的循環,而服務器仍只讀取1次時,會發生什么情況。
有沒有一種方法可以讓客戶知道他什么時候可以再寫一次? 當客戶端進行多個“ .write”操作時,還會發生什么? 服務器會保留所有內容並全部讀取它們,還是已發送的數據被覆蓋?
希望你能理解我的問題。 如果需要,請編輯問題標題。
.write
和實際的導線之間有一整層堆棧。 這些層執行各種工作,從糾錯到確保您的網絡流量不與其他流量沖突等。 至少,它們為您提供緩沖和阻止功能(如果您發送的數據過多或-在接收方-尚無數據)。
為了回答您的問題,在線的某個地方將是一個緩沖區(一塊內存),您的字節被寫入該緩沖區。 直到它們被發送到途中的下一站,它都會阻塞(等待/掛起...)。 這些呼叫將沿着堆棧向下移動,在接收側向上移動,然后在另一側向下移動,然后再次向上移動。 因此,當您的write
返回時,可以合理地確定一切都很好,除非您返回錯誤代碼,異常或執行錯誤處理。
如果服務器在處理您的請求時速度很慢,那么read
速度將達不到您的期望,因此您和它們之間的緩沖區將被填滿,此時寫入將停止。
在不同的層上也有許多不同的緩沖區,完整的答案將非常復雜。 https://zh.wikipedia.org/wiki/OSI_model
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.