转--Golang语言 rpc 简单范例

时间:2022-05-05
本文章向大家介绍转--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网页执行截图: