huazi
huazi
狠狠地学习了 以前只会用 现在想了解里面的原理 所以来学习 手敲实现一遍 感谢大佬的创作
这个应该只是一个单机版的服务注册
> @vvzhihao > > @eurus10 > > 我想请教一下为什么Server注册服务的时候要用sync.Map存储呢 > > RPC服务器实际运行起来后对这个map不应该只有读请求嘛,我感觉好像可以直接用普通的map存储啊 > > 我的观点是:map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。 > 要是注册新的服务又同时读取用map会发生错误 > > 咋在程序运行时注册新的服务呢?
> @cyj19 > > @Howie59 > > 想问下register函数中为什么不先判断serviceMap中有没有呢?先newService是有可能会有变化的参数或者是变量吗? > > 应该是参考了标准库rpc包的源码的写法 > ``` > func (server *Server) register(rcvr interface{}, name string, useName bool) error { > s := new(service) >...
> @liujing-siyang > > @okumiko > > 有个问题,注册中心里的服务列表存储的就是所有注册的地址,似乎没有服务和地址列表的映射关系呀。 > > 不影响吧,注册中心只需要告诉客户端哪些服务可用就行了,然后对可用的服务发起访问;假设注册中心的map维护的是服务地址和服务实例,哪些地方需要去拿服务实例呢?我们要的只是客户端实例! 只有一种服务的时候,这种方法可行;但是如果有多种服务的时候,这种方法就不可行了,就应该搞一个服务名和服务实例的映射关系了。
感觉registry与discover这两个东西可以合在一起,这样就不用discover再去发给请求获取registry的数据了。