我要解決的問(wèn)題是在網(wǎng)絡(luò)應(yīng)用程序中使用 io.Reader 和 io.Writer,而不使用 bufio 和字符串,正如我在網(wǎng)上找到的示例一樣。為了提高效率,我試圖避免那些暗示的記憶副本。我在游戲區(qū)( https://play.golang.org/p/-7YDs1uEc5)上使用 net.Pipe 創(chuàng)建了一個(gè)測(cè)試應(yīng)用程序。有一個(gè)數(shù)據(jù)源和接收器通過(guò)網(wǎng)絡(luò)進(jìn)行通信。管道對(duì)連接(用于模擬網(wǎng)絡(luò)連接)和遠(yuǎn)端的環(huán)回以將數(shù)據(jù)反映給我們。程序可以到達(dá)讀取發(fā)送數(shù)據(jù)的環(huán)回代理,但據(jù)我所知,寫(xiě)回連接鎖;它肯定永遠(yuǎn)不會(huì)完成。此外,接收器中的接收器從不接收任何數(shù)據(jù)。我無(wú)法弄清楚為什么寫(xiě)入無(wú)法繼續(xù),因?yàn)樗c有效的路徑完全對(duì)稱(chēng)。我已經(jīng)編寫(xiě)了其他使用雙向網(wǎng)絡(luò)連接的測(cè)試系統(tǒng),但是一旦我停止使用 bufio 和 ReadString,我就會(huì)遇到這個(gè)問(wèn)題。我查看了這些代碼,但看不到我錯(cuò)過(guò)了什么。提前感謝您的幫助。
1 回答

30秒到達(dá)戰(zhàn)場(chǎng)
TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
問(wèn)題在第 68 行:
data_received := make([]byte, 0, count)
此行創(chuàng)建一個(gè)長(zhǎng)度為 0 和容量的切片count
。調(diào)用Read
不讀取數(shù)據(jù),因?yàn)殚L(zhǎng)度為 0。調(diào)用Write
阻塞,因?yàn)閺牟蛔x取數(shù)據(jù)。
通過(guò)將行更改為:
data_received := make([]byte, count)
請(qǐng)注意,可能不會(huì)打印“Finished Writing”,因?yàn)槌绦蚩梢栽?code>dataSrc完成執(zhí)行之前退出。
- 1 回答
- 0 關(guān)注
- 264 瀏覽
添加回答
舉報(bào)
0/150
提交
取消