• golang rpc 简单范例


    RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

    它的工作流程如下图:

    image

     

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

     

    服务器端代码执行截图

    image

    客户端代码执行截图

    image

    HTTP网页执行截图:

    image

  • 相关阅读:
    [背包]JZOJ 3232 【佛山市选2013】排列
    内核空间、用户空间、虚拟地址
    进程与线程的概念
    Python中字符串颜色
    socket编程
    模块与包
    常用模块
    面向对象进阶
    面向对象编程
    函数式编程
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4295285.html
Copyright © 2020-2023  润新知