zoukankan      html  css  js  c++  java
  • go语言net包rpc远程调用的使用

    go语言net包rpc远程调用的使用 - 怀素真 - 博客园 https://www.cnblogs.com/jkko123/p/7039675.html

    myRpcServer.go

    package main
    import (
    	"net/rpc"
    	"net/http"
    	"log"
    )
    
    //go对RPC的支持,支持三个级别:TCP、HTTP、JSONRPC
    //go的RPC只支持GO开发的服务器与客户端之间的交互,因为采用了gob编码
    
    //注意字段必须是导出
    type Params struct {
    	Width, Height int;
    }
    
    type Rect struct{}
    
    //函数必须是导出的
    //必须有两个导出类型参数
    //第一个参数是接收参数
    //第二个参数是返回给客户端参数,必须是指针类型
    //函数还要有一个返回值error
    func (r *Rect) Area(p Params, ret *int) error {
    	*ret = p.Width * p.Height;
    	return nil;
    }
    
    func (r *Rect) Perimeter(p Params, ret *int) error {
    	*ret = (p.Width + p.Height) * 2;
    	return nil;
    }
    
    func main() {
    	rect := new(Rect);
    	//注册一个rect服务
    	rpc.Register(rect);
    	//把服务处理绑定到http协议上
    	rpc.HandleHTTP();
    	err := http.ListenAndServe(":8080", nil);
    	if err != nil {
    		log.Fatal(err);
    	}
    }
    

      

    myRpcClient.go

    package main
    import (
    	"net/rpc"
    	"log"
    	"fmt"
    )
    
    type Params struct {
    	Width, Height int;
    }
    
    func main() {
    	//连接远程rpc服务
    	rpc, err := rpc.DialHTTP("tcp", "127.0.0.1:8080");
    	if err != nil {
    		log.Fatal(err);
    	}
    	ret := 0;
    	//调用远程方法
    	//注意第三个参数是指针类型
    	err2 := rpc.Call("Rect.Area", Params{50, 100}, &ret);
    	if err2 != nil {
    		log.Fatal(err2);
    	}
    	fmt.Println(ret);
    	err3 := rpc.Call("Rect.Perimeter", Params{50, 100}, &ret);
    	if err3 != nil {
    		log.Fatal(err3);
    	}
    	fmt.Println(ret);
    }
    

      

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9342567.html
Copyright © 2011-2022 走看看