服务类的基本文件 ---- ===== clientv3.Client ===== →程序和etcd服务器建立的原生连接,后面的类和功能本质上都是对这个连接的封装 ---- ===== ServiceInfo ===== →(a)**IP:string** →→GrcpListten,本程序的Grcp服务器监听地址 ---- ===== Service ===== →核心服务\\ →(a)**Name:string**\\ →→服务的名称,例如unique、agent1、agent2、game1、game2... →(a)**Info:ServiceInfo**\\ →→包含一个自身Grcp监听地址的对象 例如 127.0.0.1:8101 →(a)**stop:chan error**\\ →→停止通道标记,靠这个标记来停止服务 →(a)**leaseid:clientv3.LeaseID**\\ →→和etcd连接的ID →(a)**client:*clientv3.Client**\\ →→etcd的原生连接对象 →(a)**servicePath:string**\\ →→自身服务在etcd上对应的服务地址,比如/backents/unique、/backents/agent/agent1 →(a)**serviceType:string**\\ →→枚举类型,标定本服务是unique、agent、game或是其他 →(a)**version:string**\\ →→版本号,用于自动更新 {{:wiki:arrow.png|}} →(f)**SetService(name:string,info:ServiceInfo,servicePath:string)**\\ →→设置name、info、servicePath和创建stop chan →(f)(go)**Start()**\\ →→[go]调用keepAlive发放,同时接受stop标记,和client关闭以及其他可能导致连接关闭的服务 →(f)**Stop()**\\ →→通过发送stop标记来关闭客户端 →(f)**keepAlive()**\\ →→etcd客户端保活机制。把grcp的key-value推送到etcd,并且开启保活 →(f)(go)**WatchNodes(path:string,callback:fun())**\\ →→[go]监听ectd上的字符串,并制定对应的对调 →(f)**GetClient()*clientv3.Client**\\ →→返回自身的原生连接对象 →(f)**PutKey(key:string,value:string,ttl:int64)**\\ →→把key和对应的value写入etcd服务器,key是服务器ID,value是Grcp地址 →(f)**GetValue(key:string,ttl:int64)**\\ →→根据key获取对应的value值,也就是根据服务器id来获取对应grcp地址 →(f)**CheckMe(serverInfo,name,serverType:string)**\\ →→检查制定这个name和serverType是否在配置文件中,如果不在配置文件中是不能启动的 →(f)**WatchMeChange(ch chan int)**\\ →→监控配置文件,如果配置文件改变了,则对比版本号,如果版本号发生变化要进行自动重启 →(fs)**GetServiceInfo(ev:*clientv3.Client)*ServiceInfo**\\ →→根据etcd连接事件来获取,是哪个Grcp地址 →(fs)**GetServiceInfoByValue(value:[]byte)*ServiceInfo**\\ →→根据服务ID来获取对应的grcp地址 →(fs)**BeforeService(endpoints []string)(*Service,error)**\\ →→根据etcd的地址生成一个Service,Service包含一个原生的clientv3.Client对象 ----