golang rpc 簡單範例

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。html

它的工做流程以下圖:golang

image

 

golang 使用 RPC的例子以下:服務器

服務器端代碼:網絡

這裏暴露了一個RPC接口,一個HTTP接口tcp

package main htm

import (
    "fmt"
    "io"
    "net"
    "net/http"
    "net/rpc"
) blog

type Watcher int 接口

func (w *Watcher) GetInfo(arg int, result *int) error {
    *result = 1
    return nil
} rpc

func main() { get

    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)
}

 

服務器端代碼執行截圖

image

客戶端代碼執行截圖

image

HTTP網頁執行截圖:

image

相關文章
相關標籤/搜索