jsonrpc
定义rpc方法:
type DemoService struct{}type Args struct {A, B int}// go要求的RPC调用方法必须为两个参数:一个args, 一个result。返回errorfunc (DemoService) Div(args Args, result *float64) error {if args.B == 0 {return errors.New("division by zero")}*result = float64(args.A) / float64(args.B)return nil}
server
func main() {// 登记rpc接收方的方法rpc.Register(rpcdemo.DemoService{})// 创建一个tcp socket来监听1234端口,该端口用来监听rpc请求listener, err := net.Listen("tcp", ":1234")if err != nil {panic(err)}defer listener.Close()for {// 接收rpcconn, err := listener.Accept()if err != nil {log.Printf("accept error: %v", err)continue}// 处理当前rpcgo jsonrpc.ServeConn(conn)}}
client
func main() {// 建立tcp连接conn, err := net.Dial("tcp", ":1234")if err != nil {panic(err)}client := jsonrpc.NewClient(conn)var result float64err = client.Call("DemoService.Div", rpcdemo.Args{10, 3}, &result)if err != nil {fmt.Println(err)} else {fmt.Println(result)}err = client.Call("DemoService.Div", rpcdemo.Args{10, 0}, &result)if err != nil {fmt.Println(err)} else {fmt.Println(result)}}
rpc序列化和反序列化

