UniqueService

每個UniqueService名字的腳本在同一個skynet節點只會啓動一次,如果已有同名服務啓動或啓動中,後調用的人獲得的是前一次啓動的服務的地址.

例如:  

local SERVICE
skynet.init(function()
  SERVICE = skynet.uniqueservice "foobar"
end)
UniqueService採用的是惰性初始化的策略,整個系統中第一次調用時,服務纔會被啓動起來.

如果明確知道服務已經啓動好,可以使用skynet.queryservice 來查詢已有服務,如果這個服務不存在,這個api會一直阻塞到它啓動好爲止.


默認情況下,UniqueService是不跨節點的,不同節點上調用UniqueService即使服務腳本名相同,服務也會獨立啓動起來,如果需要整個網絡有唯一服務,那麼可以在調用UniqueService的參數前加一個true,表示這是一個全局服務.

例如:

skynet.uniqueservice(true, "foobar")

在全局服務查詢方面,需要使用 skynet.queryservice(true,"foobar")


UniqueService是一個專用於服務管理的模塊,它在服務地址管理上做了特別的優化.因爲對於同一個名字,只允許啓動一次,且不準更換。所以,在實現上,我們可以在每個節點緩存查詢過的結果,而不必每次都去中心節點查詢。

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章