rpc/

directory
v0.0.0-...-f5108b3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2024 License: MIT

README

rpc

课件

hello rpc

满足net/rpc的 对象暴露规范:

// Hello的逻辑 就是 将对方发送的消息前面添加一个Hello 然后返还给对方 // 由于我们是一个rpc服务, 因此参数上面还是有约束: // 第一个参数是请求 // 第二个参数是响应 // 可以类比Http handler

// 进程内调用 HelloService{}.Hello()
type HelloService struct {
}

// 需要暴露的方法符合 net/rpc框架约束(类似于http.Handler)
// Fn(Request any, Response *any) error
func (s *HelloService) Hello(req string, resp *string) error {
	// req client远程调用时的参数
	// resp 返回给客户端的响应
	*resp = fmt.Sprintf("hello, %s", req)
	return nil
}
	// 怎么调用这个rpc server 暴露的对象的方法喃?
	// 通过call方法进行调用
	// Call(serviceMethod string, args any, reply any) error
	// serviceMethod: servivcename.fn
	resp := ""
	err = conn.Call("HelloService.Hello", "bob", &resp)
	if err != nil {
		panic(err)
	}

基于接口封装

需要由接口文档(restful)

conn.Call("HelloService.Hello", "bob", &resp)

主流RPC框架:

  1. 定义接口(约束客户端和服务端)
  2. 实现服务端
  3. 实现客户端(自动生成)
c := NewHelloServiceClient()
resp := &service.HelloResponse{}
err := c.Hello(&service.HelloRequest{Name: "bob"}, resp)
if err != nil {
    panic(err)
}
fmt.Print(resp.Message)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL