簡體   English   中英

net.Pipe的Golang io.Reader用法

[英]Golang io.Reader usage with net.Pipe

我要解決的問題是在網絡應用程序中使用io.Reader和io.Writer,而沒有按照我在網上找到的示例使用bufio和字符串。 為了提高效率,我試圖避免那些暗示的記憶復制。

我已經在播放區域( https://play.golang.org/p/-7YDs1uEc5 )上使用net.Pipe創建了一個測試應用程序。 有一個數據源和接收器通過網絡進行通信。管道對(用於模擬網絡連接)和遠端的環回將數據反射回我們。

該程序可以到達回送代理讀取已發送的數據的程度,但是據我所知,可以寫回連接鎖。 它肯定永遠不會完成。 另外,接收器中的接收器從不接收任何數據。

我無法弄清楚為什么寫不能繼續進行,因為它與起作用的路徑完全對稱。 我已經編寫了其他使用雙向網絡連接的測試系統,但是一旦我停止使用bufio和ReadString,就會遇到這個問題。 我看過那些代碼,看不到我錯過的內容。

在此先感謝您的幫助。

問題在第68行:

data_received := make([]byte, 0, count)

該行將創建一個長度為0且容量為count的切片。 由於長度為0,因此對Read的調用不會讀取數據。對Write的調用會阻塞,因為永遠不會讀取數據。

通過將行更改為來解決此問題:

data_received := make([]byte, count)

游樂場的例子

注意,“ finished Writing”可能不會被打印,因為該程序可以在dataSrc完成執行之前退出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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