go::rpc
1、rpc
type HelloService struct{} func (p *HelloService) Hello(request string, reply *string) error { *reply = "hello:" + request fmt.Println("got req", request) return nil } func main() { rpc.RegisterName("HelloService", new(HelloService)) listener, err := net.Listen("tcp", ":1234") if err != nil { fmt.Println("ListenTCP error:", err) } rpc.Accept(listener) }
func main() { client, err := rpc.Dial("tcp", "localhost:1234") if err != nil { fmt.Println(err) } defer client.close() var reply string err = client.Call("HelloService.Hello", "world", &reply) if err != nil { fmt.Println(err) } fmt.Println(reply) }
2、rpc使用json序列化
type HelloService struct{}
func (p *HelloService) User(stu Student, reply *string) error {
*reply = stu.Name + ", " + stu.School
fmt.Println("got req", stu)
return nil
}
func main() { rpc.RegisterName("HelloService", new(HelloService)) listener, err := net.Listen("tcp", ":1234") if err != nil { fmt.Println("ListenTCP error:", err) } for { // 监听Client发送的请求 conn, err2 := listener.Accept() if err2 != nil { continue } //go rpc.ServeConn(conn) //使用json序列化 go rpc.ServeCodec(jsonrpc.NewServerCodec(conn)) } }
type Student struct { Name string School string } func main() { conn, err := jsonrpc.Dial("tcp", "localhost:1234") if err != nil { fmt.Println(err) } defer conn.Close() var reply string err = conn.Call("HelloService.User", &Student{ Name: "xiaoming", School: "qh", }, &reply) if err != nil { fmt.Println(err) } fmt.Println(reply) }
3、rpc使用http
func (p *HelloService) User(stu Student, reply *string) error { *reply = stu.Name + ", " + stu.School fmt.Println("got req", stu) return nil } func main() { rpc.Register(new(HelloService)) rpc.HandleHTTP() err := http.ListenAndServe(":1234", nil) if err != nil { fmt.Println(err) } }
type Student struct { Name string School string } func main() { conn, err := rpc.DialHTTP("tcp", "localhost:1234") if err != nil { fmt.Println(err) } defer conn.Close() var reply string err = conn.Call("HelloService.User", &Student{ Name: "xiaoming", School: "qh", }, &reply) if err != nil { fmt.Println(err) } fmt.Println(reply) }