zoukankan      html  css  js  c++  java
  • golang学习之rpc实例

    rpc(远程过程调用),可以像调用本地程序一样调用远端服务,rpc分为http方式和tcp连接方式,使用http的rpc调用如下:

    首先是server端:

    // rpc_server project main.go
    package main
    
    import (
        "fmt"
        "net"
        "net/http"
        "net/rpc"
    )
    
    type Watcher int
    
    func (watcher *Watcher) GetInfo(arg int, result *int) error {
        *result = 1 + arg
        return nil
    }
    
    func main() {
        watcher := new(Watcher)
        rpc.Register(watcher)
        rpc.HandleHTTP()
        listener, err := net.Listen("tcp", ":8888")
        if err != nil {
            fmt.Println("监听失败,端口可能被占用")
        }
        fmt.Println("正在监听8888端口")
        go http.Serve(listener, nil)
    }

    然后是client端:

    // rpc_client project main.go
    package main
    
    import (
        "fmt"
        "net/rpc"
    )
    
    func main() {
        fmt.Println("正在链接中...")
        client, err := rpc.DialHTTP("tcp", "127.0.0.1:8888")
        if err != nil {
            fmt.Println("链接服务器失败:", err)
        }
        var reply int
        err = client.Call("Watcher.GetInfo", 1, &reply)
        if err != nil {
            fmt.Println("调用远程服务失败", err)
        }
        fmt.Println("远程服务返回结果:", reply)
    }

    调用结果:

  • 相关阅读:
    find the most comfortable road
    Rank of Tetris
    Segment set
    Codeforces Round #380 (Div. 2)D. Sea Battle
    A Bug's Life
    Is It A Tree?
    N皇后问题
    符号三角形
    2016 ICPC总结
    Sudoku Killer
  • 原文地址:https://www.cnblogs.com/vipzhou/p/5661568.html
Copyright © 2011-2022 走看看