• Go RPC返回值


    Go 语言RPC定义格式如下:

    func (t *T) MethodName(argType T1, replyType *T2) error

    第一个参数是接收的参数,第二个参数是返回给客户端的参数,第二个参数必
    须是指针类型的

    如果Server端RPC函数返回错误,即error不为nil,第二个参数不会返回任何信息。

    例子如下。

    server端

    package main
    
    import (
        "fmt"
        "net"
        "net/rpc"
        "net/rpc/jsonrpc"
    )
    
    type Counter struct {
        Sum int
    }
    
    func (this *Counter) Add(i int, r *int) error {
    
        if i < 0 {
        	*r = -1
        	return fmt.Errorf("data format incorrect")
        }
    
    
        this.Sum += i
        *r = this.Sum
        fmt.Printf("i: %v
    ", i)
        return nil
    }
    
    func NewJsonRpcSocketServer() {
    
        rpc.Register(new(Counter))
    
        l, err := net.Listen("tcp", ":3333")
        if err != nil {
            fmt.Printf("Listener tcp err: %s", err)
            return
        }
    
        for {
            fmt.Println("wating...")
            conn, err := l.Accept()
            if err != nil {
                fmt.Sprintf("accept connection err: %s
    ", conn)
            }
            go jsonrpc.ServeConn(conn)
        }
    
    }
    
    func main() {
    
    	NewJsonRpcSocketServer()
    }
    

    server端对于参数小于0的情况,返回错误, 并把repoy设置为-1。

    client端

    package main
    
    import (
    	"fmt"
    	"net"
    	"net/rpc/jsonrpc"
    	"time"
    )
    
    
    func main() {
    
    	 NewJsonRpcSocketClient()
    }
    
    
    func NewJsonRpcSocketClient() {
    
        timeout := time.Second*30
        conn, err := net.DialTimeout("tcp", "127.0.0.1:3333", timeout)
        if err != nil {
            fmt.Printf("create client err:%s
    ", err)
            return
        }
        defer conn.Close()
    
        client := jsonrpc.NewClient(conn)
        var reply int
        err = client.Call("Counter.Add", -10, &reply)
        if err != nil {
        
        	fmt.Println("error:", err, "reply:", reply)
    	return
        }
    
        fmt.Printf("reply: %d, err: %v
    ", reply, err)
    
    }
    

    client端传入参数小于0,此时client output:

    error: data format incorrect reply: 0

    reply仍然是默认值,server端设置的信息没有返回给client。
    结果得到验证。

  • 相关阅读:
    搜狗输入法赏析
    第二次冲刺个人总结05
    程序员的自我修养阅读笔记01
    第十五周学习总结
    mysql 查询优化
    mysql explain 详解
    nginx基本配置与参数说明
    input输入框实现联想关键词功能
    JS图片懒加载
    mysql中timestamp,datetime,int类型的区别与优劣
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8974831.html
Copyright © 2020-2023  润新知