1. 程式人生 > 其它 >轉--Golang語言 rpc 簡單範例

轉--Golang語言 rpc 簡單範例

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網頁執行截圖: