簡體   English   中英

保持 Golang net/rpc 的連接

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

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