zoukankan      html  css  js  c++  java
  • 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。
    结果得到验证。

  • 相关阅读:
    读书分析和读书步骤的方法
    如何在招聘中挖掘面试人员的能力
    接口测试自动化之Robot Framework
    电商后台系统产品逻辑全解析
    RobotFramework之环境安装、关键字、库详解(三)
    管理学相关系统知识
    软件测试岗位人员离职文档交接
    软件测试人员招聘计划
    测试总结过程中的质量分析报告
    测试人员应该怎么写测试总结?
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/8974831.html
Copyright © 2011-2022 走看看