Go RPC

Go RPC

Go 原生的网络RPC

需要关联Go的net框架和库内容(net,tpc,http等等)

理论

总体来说RPC其实就是在server注册一些service,把这些service的method给exported出去。这样可以让client通过网络等方式来调用。但是register有限制,不能注册相同的service多次,但是可以注册不同的service。

注册的方法要求(criteria):

- the method's type is exported.
- the method is exported.
- the method has two arguments, both exported (or builtin) types.
- the method's second argument is a pointer.
- the method has return type error.

所以方法按照如下的形式:

func (t *T) MethodName(argType T1, replyType *T2) error

server端

go中单独有一个server的结构体

操作的顺序是:

  1. register对应的service,其中可以exported的method必须符合上述的要求
  2. 可以单独去服务一个conn,使用server的ServeConn,接下来会调用ServeCodec但是ServeConn方法是在所有的操作结束以后才会返回。所以如果想来一个连接分别并发的处理,就需要ServeConn在go statement中使用。其实也就是一个conn可能会有多个request,那么会在ServeCodec中并发的处理。
  3. 或者维护一个listener,使用accept的方式来处理每一个connect。
  4. 或者使用http的方式

client端

go中单独实现有client的结构体

  1. client通过Http或者conn的方式建立client
  2. client使用call或者go进行rpc调用,只不过一个是同步一个是异步调用
  3. 如果是异步调用就处理调用结果

编码/解码器

server和client的处理逻辑

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容