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

    调用结果:

  • 相关阅读:
    排序二——交换排序
    桥接模式 Bridge
    外观模式Facade(解耦)
    装饰模式和代理模式的区别
    代理模式 proxy
    装饰器模式 Decorator
    适配器模式
    android launcher-启动过程
    ubuntu 编译openwrt
    Eclipse Memory Analyzer tool(MAT)
  • 原文地址:https://www.cnblogs.com/vipzhou/p/5661568.html
Copyright © 2011-2022 走看看