作者:shihuaping0918@163.com,转载请注明作者
skynet是由服务组成的,为了解决服务间调用时,服务地址的获取问题,skynet可以给服务起一个别名,这个别名是字符串。并提供了queryservice函数,queryservice可以根据名字查询到服务,获取服务的地址。服务的名字必须是唯一的,不可重复的。服务的地址是运行时唯一的,但名字是永远唯一的。这样也能解决集群通信时,有多台机器,每台机器跑不同的服务,但有一台机器上的服务宕机了,重启以后,服务的地址发生变化,其它机器调用也不受影响。
以下是几个写服务时经常要用到的函数。
newservice(name, ...) 启动一个名为 name 的新服务。
uniqueservice(name, ...) 启动一个唯一服务,如果服务该服务已经启动,则返回已启动的服务地址。
queryservice(name) 查询一个由 uniqueservice 启动的唯一服务的地址,若该服务尚未启动则等待。
localname(name) 返回同一进程内,用 register 注册的具名服务的地址。
newservice可以在一个进程里启动多个服务,这适用于无状态的服务。
uniqueservice则是类似于设计模式中的单件(singleton),这适用于需要唯一性的服务。举个例子,比如写日志,只想写一份。或者是全局共享的数据。
服务的别名在第1篇里其实已经用到过了,就是用register函数注册服务的名字。下一篇将会有一个例子演示这些函数的使用。
如果觉得这篇文章对您有所帮助,请点赞或者赏杯咖啡吧。