[英]Keeping connection for Golang net/rpc
據我了解,在此處閱讀 net/rpc package 文檔https://pkg.go.dev/net/rpc@go1.17每次調用服務器時都會建立一個新的客戶端連接。 如何實現每個新客戶端打開一個新連接、使其保持活動狀態並僅使用 TPC 調用 RPC 方法,即不使用 HTTP?
如果您使用任何標准庫方法創建新客戶端:
client, err := rpc.DialHTTP("tcp", serverAddress + ":1234")
if err != nil {
log.Fatal("dialing:", err)
}
在引擎蓋下,它將調用net.Dial
,從而產生與rpc.Client
關聯的單個連接:
conn, err := net.Dial(network, address)
您可以看到 NewClient 在此處實例化時采用單個連接: https://cs.opensource.google/go/go/+/refs/tags/go1.17.5:src/net/rpc/client.go;l=193 -197;drc=refs%2Ftags%2Fgo1.17.5;bpv=1;bpt=1
該客戶端上對Client.Call
的任何調用都將寫入和讀取該底層連接,而不會產生新連接。
因此,只要您一次實例化您的客戶端,然后對同一客戶端進行所有 rpc 調用,您將始終使用單個連接。 如果該連接被切斷,客戶端將不再可用。
rpc.Client
也是線程安全的,因此您可以安全地創建它並在所有地方使用它,而無需建立新的連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.