补充lient

This commit is contained in:
yumaojun03 2025-02-16 11:41:36 +08:00
parent 2f8a4f3900
commit 45ef1f021e
4 changed files with 61 additions and 25 deletions

View File

@ -2,31 +2,25 @@ package main
import (
"fmt"
"net/rpc"
"gitlab.com/go-course-project/go17/skills/rpc/hello_world/service"
)
type HelloRequest struct {
MyName string `json:"my_name"`
}
type HelloResponse struct {
Message string `json:"message"`
}
func main() {
// 1. 通过网络调用 服务端的函数(RPC)
// 建立网络连接
conn, err := rpc.Dial("tcp", "127.0.0.1:1234")
client, err := service.NewClient("127.0.0.1:1234")
if err != nil {
panic(err)
}
// 方法调用
// serviceMethod string, args any, reply any
req := &HelloRequest{
req := &service.HelloRequest{
MyName: "bob",
}
resp := &HelloResponse{}
if err := conn.Call("HelloService.Hello", req, resp); err != nil {
resp := &service.HelloResponse{}
// HelloService().Hello()
if err := client.Hello(req, resp); err != nil {
panic(err)
}

View File

@ -3,28 +3,24 @@ package main
import (
"net"
"net/rpc"
"gitlab.com/go-course-project/go17/skills/rpc/hello_world/service"
)
var _ service.HelloService = (*HelloServiceServer)(nil)
// 实现业务功能
// req := &HelloRequest{}
// resp := &HelloResponse{}
// err := &HelloServiceImpl{}.Hello(req, resp)
// err := &HelloServiceServer{}.Hello(req, resp)
// net/rpc
// 1. 写好的对象, 注册给RPC Server
// 2. 再把RPC Server 启动起来
type HelloServiceImpl struct {
}
type HelloRequest struct {
MyName string `json:"my_name"`
}
type HelloResponse struct {
Message string `json:"message"`
type HelloServiceServer struct {
}
// HTTP Handler
func (h *HelloServiceImpl) Hello(request *HelloRequest, response *HelloResponse) error {
func (h *HelloServiceServer) Hello(request *service.HelloRequest, response *service.HelloResponse) error {
response.Message = "hello:" + request.MyName
return nil
}
@ -33,7 +29,7 @@ func main() {
// 1. 把业务 注册给RPC
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
// Hello(request *HelloRequest, response *HelloResponse) error
if err := rpc.RegisterName("HelloService", &HelloServiceImpl{}); err != nil {
if err := rpc.RegisterName("HelloService", &HelloServiceServer{}); err != nil {
panic(err)
}

View File

@ -0,0 +1,33 @@
package service
import (
"net/rpc"
)
func NewClient(address string) (HelloService, error) {
conn, err := rpc.Dial("tcp", address)
if err != nil {
return nil, err
}
// buf := bytes.NewBuffer([]byte{})
// gob.NewEncoder(buf).Encode(HelloRequest{Name: "test"})
//
// reader := bytes.NewReader([]byte("{}"))
// resp := HelloRequest{Name: "test"}
// gob.NewDecoder(reader).Decode(&resp)
return &HelloServiceClient{conn: conn}, nil
}
// 要封装原始的 不友好的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
}

View File

@ -0,0 +1,13 @@
package service
type HelloService interface {
Hello(request *HelloRequest, response *HelloResponse) error
}
type HelloRequest struct {
MyName string `json:"my_name"`
}
type HelloResponse struct {
Message string `json:"message"`
}