补充lient
This commit is contained in:
parent
2f8a4f3900
commit
45ef1f021e
@ -2,31 +2,25 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"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() {
|
func main() {
|
||||||
// 1. 通过网络调用 服务端的函数(RPC)
|
// 1. 通过网络调用 服务端的函数(RPC)
|
||||||
// 建立网络连接
|
// 建立网络连接
|
||||||
conn, err := rpc.Dial("tcp", "127.0.0.1:1234")
|
client, err := service.NewClient("127.0.0.1:1234")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
// 方法调用
|
// 方法调用
|
||||||
// serviceMethod string, args any, reply any
|
// serviceMethod string, args any, reply any
|
||||||
req := &HelloRequest{
|
req := &service.HelloRequest{
|
||||||
MyName: "bob",
|
MyName: "bob",
|
||||||
}
|
}
|
||||||
resp := &HelloResponse{}
|
resp := &service.HelloResponse{}
|
||||||
if err := conn.Call("HelloService.Hello", req, resp); err != nil {
|
// HelloService().Hello()
|
||||||
|
if err := client.Hello(req, resp); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,28 +3,24 @@ package main
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
"net/rpc"
|
"net/rpc"
|
||||||
|
|
||||||
|
"gitlab.com/go-course-project/go17/skills/rpc/hello_world/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var _ service.HelloService = (*HelloServiceServer)(nil)
|
||||||
|
|
||||||
// 实现业务功能
|
// 实现业务功能
|
||||||
// req := &HelloRequest{}
|
// req := &HelloRequest{}
|
||||||
// resp := &HelloResponse{}
|
// resp := &HelloResponse{}
|
||||||
// err := &HelloServiceImpl{}.Hello(req, resp)
|
// err := &HelloServiceServer{}.Hello(req, resp)
|
||||||
// net/rpc
|
// net/rpc
|
||||||
// 1. 写好的对象, 注册给RPC Server
|
// 1. 写好的对象, 注册给RPC Server
|
||||||
// 2. 再把RPC Server 启动起来
|
// 2. 再把RPC Server 启动起来
|
||||||
type HelloServiceImpl struct {
|
type HelloServiceServer struct {
|
||||||
}
|
|
||||||
|
|
||||||
type HelloRequest struct {
|
|
||||||
MyName string `json:"my_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type HelloResponse struct {
|
|
||||||
Message string `json:"message"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTTP Handler
|
// 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
|
response.Message = "hello:" + request.MyName
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -33,7 +29,7 @@ func main() {
|
|||||||
// 1. 把业务 注册给RPC
|
// 1. 把业务 注册给RPC
|
||||||
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
|
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
|
||||||
// Hello(request *HelloRequest, response *HelloResponse) 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)
|
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