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

相关文章
相关标签/搜索