轉--Golang語言 rpc 簡單範例
阿新 • • 發佈:2022-05-05
RPC(Remote Procedure Call Protocol)——遠端過程呼叫協議,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。
它的工作流程如下圖:
golang 使用 RPC的例子如下:
伺服器端程式碼:
這裡暴露了一個RPC介面,一個HTTP介面
package main import ( "fmt" "io" "net" "net/http" "net/rpc" ) type Watcher int func (w *Watcher) GetInfo(arg int, result *int) error { *result = 1 return nil } func main() { http.HandleFunc("/ghj1976", Ghj1976Test) watcher := new(Watcher) rpc.Register(watcher) rpc.HandleHTTP() l, err := net.Listen("tcp", ":1234") if err != nil { fmt.Println("監聽失敗,埠可能已經被佔用") } fmt.Println("正在監聽1234埠") http.Serve(l, nil) } func Ghj1976Test(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "<html><body>ghj1976-123</body></html>") }
客戶端程式碼:
package main import ( "fmt" "net/rpc" ) func main() { client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234") if err != nil { fmt.Println("連結rpc伺服器失敗:", err) } var reply int err = client.Call("Watcher.GetInfo", 1, &reply) if err != nil { fmt.Println("呼叫遠端服務失敗", err) } fmt.Println("遠端服務返回結果:", reply) }
伺服器端程式碼執行截圖
客戶端程式碼執行截圖
HTTP網頁執行截圖: