簡體   English   中英

當我們執行networkstream.write()時會發生什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM