比如:
local gate = skynet.uniqueservice "wsgate"
在 Skynet 中,skynet.uniqueservice
函数用于创建一个唯一的服务实例,并返回该服务的地址(通常是一个整数)。这个唯一服务地址是 Skynet 内部用来标识该服务的唯一标识符。
当你调用 skynet.uniqueservice "wsgate"
创建了一个名为 "wsgate" 的服务实例时,Skynet 会在内部维护一个服务注册表,用来记录服务名称与服务地址之间的映射关系。这样,在之后的调用中,Skynet 就可以根据服务名称来索引到对应的服务地址。
skynet.call(gate, "lua", "start", {
port = tonumber(skynet.getenv("ws_port")) or 2189,
maxclient = tonumber(skynet.getenv("maxclient")) or 1024,
})
你调用 skynet.call(gate, "lua", "start", {...})
时,你传递的 gate
参数就是之前通过 skynet.uniqueservice
函数创建的 "wsgate" 服务的地址。Skynet 根据这个地址来索引到相应的服务实例,并调用其提供的服务接口。
总的来说,Skynet 在内部通过服务注册表来管理服务名称和服务地址之间的映射关系,以便在调用服务时能够快速地找到对应的服务实例。