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

golang -- rpc

发布时间:2020-12-16 18:57:04 所属栏目:大数据 来源:网络整理
导读:内置的gob rpcserver packagemainimport("errors""fmt""net""net/rpc""os")typeArgsstruct{A,Bint}typeQuotientstruct{Quo,Remint}typeArithintfunc(t*Arith)Multiply(args*Args,reply*int)error{*reply=args.A*args.Breturnnil}func(t*Arith)Divide(args*Ar

内置的gob

rpcserver

packagemain

import(
"errors"
"fmt"
"net"
"net/rpc"
"os"
)

typeArgsstruct{
A,Bint
}

typeQuotientstruct{
Quo,Remint
}

typeArithint

func(t*Arith)Multiply(args*Args,reply*int)error{
*reply=args.A*args.B
returnnil
}

func(t*Arith)Divide(args*Args,quo*Quotient)error{
ifargs.B==0{
returnerrors.New("dividebyzero")
}
quo.Quo=args.A/args.B
quo.Rem=args.A%args.B
returnnil
}

funcmain(){
arith:=new(Arith)
rpc.Register(arith)
tcpAddr,err:=net.ResolveTCPAddr("tcp",":1234")
checkError(err)
listener,err:=net.ListenTCP("tcp",tcpAddr)
checkError(err)
/*
rpc.Accept(listener)
*/
for{
conn,err:=listener.Accept()
iferr!=nil{
continue
}
rpc.ServeConn(conn)
}
}

funccheckError(errerror){
iferr!=nil{
fmt.Println("Fatalerror",err.Error())
os.Exit(1)
}
}

rpcclient

packagemain

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

typeArgsstruct{
A,Remint
}

funcmain(){
iflen(os.Args)!=2{
fmt.Println("Usage:",os.Args[0],"server:port")
os.Exit(1)
}
service:=os.Args[1]
client,err:=rpc.Dial("tcp",service)
iferr!=nil{
log.Fatal("dialing:",err)
}
//Synchronouscall
args:=Args{17,8}
varreplyint
err=client.Call("Arith.Multiply",args,&reply)
iferr!=nil{
log.Fatal("aritherror:",err)
}
fmt.Printf("Arith:%d*%d=%dn",args.A,args.B,reply)
varquotQuotient
err=client.Call("Arith.Divide",&quot)
iferr!=nil{
log.Fatal("aritherror:",err)
}
fmt.Printf("Arith:%d/%d=%dremainder%dn",quot.Quo,quot.Rem)
}

测试

运行./server
运行./client127.0.0.1:1234

(编辑:李大同)

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

    推荐文章
      热点阅读