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