diff --git a/examples/cluster1.lua b/examples/cluster1.lua index 6623aba3..9ba8fcbf 100644 --- a/examples/cluster1.lua +++ b/examples/cluster1.lua @@ -1,6 +1,7 @@ local skynet = require "skynet" local cluster = require "cluster" require "skynet.manager" -- import skynet.name +local snax = require "snax" skynet.start(function() local sdb = skynet.newservice("simpledb") @@ -11,4 +12,6 @@ skynet.start(function() print(skynet.call(".simpledb", "lua", "GET", "b")) cluster.open "db" cluster.open "db2" + -- unique snax service + snax.uniqueservice "pingserver" end) diff --git a/examples/cluster2.lua b/examples/cluster2.lua index 7b315e1a..09e53076 100644 --- a/examples/cluster2.lua +++ b/examples/cluster2.lua @@ -6,4 +6,8 @@ skynet.start(function() print(skynet.call(proxy, "lua", "GET", "a")) print(cluster.call("db", ".simpledb", "GET", "a")) print(cluster.call("db2", ".simpledb", "GET", "b")) + + -- test snax service + local pingserver = cluster.snax("db", "pingserver") + print(pingserver.req.ping "hello") end) diff --git a/examples/config.c1 b/examples/config.c1 index d1fdf165..436859d4 100644 --- a/examples/config.c1 +++ b/examples/config.c1 @@ -6,4 +6,5 @@ bootstrap = "snlua bootstrap" -- The service for bootstrap luaservice = "./service/?.lua;./test/?.lua;./examples/?.lua" lualoader = "lualib/loader.lua" cpath = "./cservice/?.so" -cluster = "./examples/clustername.lua" \ No newline at end of file +cluster = "./examples/clustername.lua" +snax = "./test/?.lua" diff --git a/examples/config.c2 b/examples/config.c2 index 2e8cbb0b..23886105 100644 --- a/examples/config.c2 +++ b/examples/config.c2 @@ -6,4 +6,5 @@ bootstrap = "snlua bootstrap" -- The service for bootstrap luaservice = "./service/?.lua;./test/?.lua;./examples/?.lua" lualoader = "lualib/loader.lua" cpath = "./cservice/?.so" -cluster = "./examples/clustername.lua" \ No newline at end of file +cluster = "./examples/clustername.lua" +snax = "./test/?.lua" diff --git a/lualib/cluster.lua b/lualib/cluster.lua index ddb00d13..e4407f06 100644 --- a/lualib/cluster.lua +++ b/lualib/cluster.lua @@ -24,6 +24,15 @@ function cluster.proxy(node, name) return skynet.call(clusterd, "lua", "proxy", node, name) end +function cluster.snax(node, name, address) + local snax = require "snax" + if not address then + address = cluster.call(node, ".service", "QUERY", "snaxd" , name) + end + local handle = skynet.call(clusterd, "lua", "proxy", node, address) + return snax.bind(handle, name) +end + skynet.init(function() clusterd = skynet.uniqueservice("clusterd") end) diff --git a/lualib/snax/interface.lua b/lualib/snax/interface.lua index a2f8aa64..bd996c4d 100644 --- a/lualib/snax/interface.lua +++ b/lualib/snax/interface.lua @@ -64,7 +64,7 @@ return function (name , G, loader) local pattern do - local path = skynet.getenv "snax" + local path = assert(skynet.getenv "snax" , "please set snax in config file") local errlist = {} diff --git a/service/clusterproxy.lua b/service/clusterproxy.lua index abdff0cc..e003da2b 100644 --- a/service/clusterproxy.lua +++ b/service/clusterproxy.lua @@ -11,6 +11,7 @@ skynet.register_protocol { } local forward_map = { + [skynet.PTYPE_SNAX] = skynet.PTYPE_SYSTEM, [skynet.PTYPE_LUA] = skynet.PTYPE_SYSTEM, [skynet.PTYPE_RESPONSE] = skynet.PTYPE_RESPONSE, -- don't free response message } diff --git a/service/snaxd.lua b/service/snaxd.lua index 02e3738c..d27008be 100644 --- a/service/snaxd.lua +++ b/service/snaxd.lua @@ -54,7 +54,7 @@ end skynet.start(function() local init = false - skynet.dispatch("snax", function ( session , source , id, ...) + local function dispatcher( session , source , id, ...) local method = func[id] if method[2] == "system" then @@ -84,5 +84,11 @@ skynet.start(function() assert(init, "Init first") timing(method, ...) end - end) + end + skynet.dispatch("snax", dispatcher) + + -- set lua dispatcher + function snax.enablecluster() + skynet.dispatch("lua", dispatcher) + end end) diff --git a/test/pingserver.lua b/test/pingserver.lua index 65a25405..5785b61b 100644 --- a/test/pingserver.lua +++ b/test/pingserver.lua @@ -43,6 +43,7 @@ end function init( ... ) print ("ping server start:", ...) + snax.enablecluster() -- enable cluster call -- init queue lock = queue() end