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",") iferr!=nil{ log.Fatal("aritherror:",err) } fmt.Printf("Arith:%d/%d=%dremainder%dn",quot.Quo,quot.Rem) } 测试 运行./server 运行./client127.0.0.1:1234 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |