[英]Why sends of "large" array/slice using net/rpc/jsonrpc codec over unix socket connection hang?
我正在嘗試使用 golang 的內置net/rpc
服務器和客戶端以及net/rpc/jsonrpc
編解碼器發送一組數據作為 rpc 回復。 但是我遇到了一些麻煩。
我發送的數據大約為 48 個字節,客戶端將掛在client.Call
中。
我做了一個復制問題的游樂場: https://go.dev/play/p/_IQ9SF7TSdc
如果將上述程序中的常量“N”更改為 5,一切都會按預期進行!
另一個 playground 顯示了問題似乎只有在有問題的切片/數組超過 49 字節時才會出現: https://go.dev/play/p/R8CQa0mv7vB
有誰知道可能是什么問題? Golang 對數組和切片數據類型的測試並不完全是為“大”arrays 設計的。 提前致謝。
在監聽器設置的那一行:
listener, err := net.ListenUnix("unixpacket", &net.UnixAddr{RPCPath, "unixpacket"})
不要使用unixpacket
。 它對應於不是 stream 協議的底層 SOCK_SEQPACKET。 大文件可能以接收方無法處理的方式分成數據包。 使用unix
代替,它對應於 SOCK_STREAM。 有關更多信息,請參閱此 SO 帖子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.