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
|
|
|
|
}
|