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的结构体
操作的顺序是:
- register对应的service,其中可以exported的method必须符合上述的要求
- 可以单独去服务一个conn,使用server的
ServeConn
,接下来会调用ServeCodec
但是ServeConn方法是在所有的操作结束以后才会返回。所以如果想来一个连接分别并发的处理,就需要ServeConn
在go statement中使用。其实也就是一个conn可能会有多个request,那么会在ServeCodec
中并发的处理。 - 或者维护一个listener,使用accept的方式来处理每一个connect。
- 或者使用http的方式
client端
go中单独实现有client的结构体
- client通过Http或者conn的方式建立client
- client使用call或者go进行rpc调用,只不过一个是同步一个是异步调用
- 如果是异步调用就处理调用结果
网友评论