40 lines
883 B
Go
Raw Normal View History

2025-02-16 11:41:36 +08:00
package service
import (
2025-02-16 12:00:21 +08:00
"log"
"net"
2025-02-16 11:41:36 +08:00
"net/rpc"
2025-02-16 12:00:21 +08:00
"net/rpc/jsonrpc"
2025-02-16 11:41:36 +08:00
)
func NewClient(address string) (HelloService, error) {
2025-02-16 12:00:21 +08:00
// 建立TCP连接
conn, err := net.Dial("tcp", "localhost:1234")
2025-02-16 11:41:36 +08:00
if err != nil {
2025-02-16 12:00:21 +08:00
log.Fatal("net.Dial:", err)
2025-02-16 11:41:36 +08:00
}
2025-02-16 12:00:21 +08:00
client := rpc.NewClientWithCodec(jsonrpc.NewClientCodec(conn))
2025-02-16 11:41:36 +08:00
// buf := bytes.NewBuffer([]byte{})
// gob.NewEncoder(buf).Encode(HelloRequest{Name: "test"})
//
// reader := bytes.NewReader([]byte("{}"))
// resp := HelloRequest{Name: "test"}
// gob.NewDecoder(reader).Decode(&resp)
2025-02-16 12:00:21 +08:00
return &HelloServiceClient{conn: client}, nil
2025-02-16 11:41:36 +08:00
}
// 要封装原始的 不友好的rpc call
type HelloServiceClient struct {
conn *rpc.Client
}
func (c *HelloServiceClient) Hello(request *HelloRequest, response *HelloResponse) error {
if err := c.conn.Call("HelloService.Hello", request, response); err != nil {
panic(err)
}
return nil
}