补充lient
This commit is contained in:
parent
2f8a4f3900
commit
45ef1f021e
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
33
skills/rpc/hello_world/service/client.go
Normal file
33
skills/rpc/hello_world/service/client.go
Normal 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
|
||||
}
|
13
skills/rpc/hello_world/service/interface.go
Normal file
13
skills/rpc/hello_world/service/interface.go
Normal 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"`
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user