加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang RPC

发布时间:2020-12-16 18:21:13 所属栏目:大数据 来源:网络整理
导读:Server.go package main import ( "fmt" "net/rpc" "net" "log" "sync" ) type Arg struct { Param1 string } type Request struct { Arg1 int Arg2 string Arg3 *Arg} type Response struct { Arg1 int Arg2 string Arg3 *Arg} type Arith int var lock syn
Server.go
package main

import (
    "fmt"
    "net/rpc"
    "net"
    "log"
    "sync"
)

type Arg struct {
    Param1 string
}
type Request struct{
    Arg1 int
    Arg2 string
    Arg3 *Arg

}
type Response struct {
    Arg1 int
    Arg2 string
    Arg3 *Arg
}
type Arith int
var lock sync.Mutex
var count =0
func (t *Arith) Deal(args Request,reply *Response) error {
    lock.Lock()
    count+=1
    lock.Unlock()
    fmt.Println("Count : ",count)
    fmt.Println(args)
    reply.Arg2="t2"
    reply.Arg1=111
    //reply.Arg3=new(Arg)
    reply.Arg3=&Arg{"Response"}
    //reply.Arg3.Param1="Response"
    fmt.Println(reply)
    return nil
}
func main() {
    newServer := rpc.NewServer()
    newServer.RegisterName("RpcServer",new(Arith))
    l,e := net.Listen("tcp","127.0.0.1:1234") // any available address
    if e != nil {
        log.Fatalf("net.Listen tcp :0: %v",e)
    }
    fmt.Println("Waiting.")
    newServer.Accept(l)
    newServer.HandleHTTP("/foo","/bar")
}

client.go

package main

import (
    "net"
    "net/rpc"
    "fmt"
    "time"
)
type Arg struct {
    Param1 string
}
type Request struct{
    Arg1 int
    Arg2 string
    Arg3 *Arg

}
type Response struct {
    Arg1 int
    Arg2 string
    Arg3 *Arg
}
func main() {

    for i:=10;i>=0;i-- {
        go func() {
            address,err := net.ResolveTCPAddr("tcp","127.0.0.1:1234")
            if err != nil {
                panic(err)
            }
            conn,err := net.DialTCP("tcp",nil,address)
            defer conn.Close()

            client := rpc.NewClient(conn)
            defer client.Close()

            r := new(Request)
            r.Arg1 = i
            r.Arg2 = "2"
            r.Arg3 = &Arg{"Req1"}
            fmt.Println(r)
            res := new(Response)
            res.Arg3 = new(Arg)
            err = client.Call("RpcServer.Deal",r,&res)
            fmt.Println(res)
            fmt.Println(res.Arg3.Param1)
            if err != nil {
                fmt.Println(err)
            }
        }()
    }
    time.Sleep(10*time.Second)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读