From 5479848df66fa64fc349b171bbea76c250406bc6 Mon Sep 17 00:00:00 2001 From: hongl Date: Wed, 14 Jun 2017 10:27:04 +0800 Subject: [PATCH] =?UTF-8?q?service.lua=E5=8F=AF=E4=BB=A5=E5=9C=A8=E7=94=A8?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=9C=8D=E5=8A=A1=E4=B8=AD=E5=A4=8D=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lualib/skynet/datasheet/builder.lua | 12 ++++++------ lualib/skynet/service.lua | 11 ++++++----- test/testservice/init.lua | 20 ++++++++++++++++++-- test/testservice/kvdb.lua | 15 +++++++-------- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/lualib/skynet/datasheet/builder.lua b/lualib/skynet/datasheet/builder.lua index 2d14ccd4..54ff5883 100644 --- a/lualib/skynet/datasheet/builder.lua +++ b/lualib/skynet/datasheet/builder.lua @@ -7,10 +7,10 @@ local builder = {} local cache = {} local dataset = {} - +local address local function monitor(pointer) skynet.fork(function() - skynet.call(service.address, "lua", "collect", pointer) + skynet.call(address, "lua", "collect", pointer) for k,v in pairs(cache) do if v == pointer then cache[k] = nil @@ -32,7 +32,7 @@ function builder.new(name, v) assert(dataset[name] == nil) local datastring = dumpsheet(v) local pointer = core.stringpointer(datastring) - skynet.call(service.address, "lua", "update", name, pointer) + skynet.call(address, "lua", "update", name, pointer) cache[datastring] = pointer dataset[name] = datastring monitor(pointer) @@ -43,10 +43,10 @@ function builder.update(name, v) local newversion = dumpsheet(v) local diff = dump.diff(lastversion, newversion) local pointer = core.stringpointer(diff) - skynet.call(service.address, "lua", "update", name, pointer) + skynet.call(address, "lua", "update", name, pointer) cache[diff] = pointer local lp = assert(cache[lastversion]) - skynet.send(service.address, "lua", "release", lp) + skynet.send(address, "lua", "release", lp) dataset[name] = diff monitor(pointer) end @@ -161,7 +161,7 @@ end) end skynet.init(function() - service.new("datasheet", datasheet_service) + address=service.new("datasheet", datasheet_service) end) return builder diff --git a/lualib/skynet/service.lua b/lualib/skynet/service.lua index 32d665cf..341f34fc 100644 --- a/lualib/skynet/service.lua +++ b/lualib/skynet/service.lua @@ -18,19 +18,20 @@ end function service.new(name, mainfunc, ...) local p = get_provider() local addr, booting = skynet.call(p, "lua", "test", name) + local address if addr then - service.address = addr + address = addr else if booting then - service.address = skynet.call(p, "lua", "query", name) + address = skynet.call(p, "lua", "query", name) else check(mainfunc) local code = string.dump(mainfunc) - service.address = skynet.call(p, "lua", "launch", name, code, ...) + address = skynet.call(p, "lua", "launch", name, code, ...) end end - cache[name] = service.address - return service.address + cache[name] = address + return address end function service.query(name) diff --git a/test/testservice/init.lua b/test/testservice/init.lua index d69b8973..0e59bd4b 100644 --- a/test/testservice/init.lua +++ b/test/testservice/init.lua @@ -1,7 +1,23 @@ local skynet = require "skynet" local kvdb = require "kvdb" +local function dbname(i) + return "db"..i +end skynet.start(function() - kvdb.set("A", 1) - print(kvdb.get "A") + for i=1,10 do + kvdb.new(dbname(i)) + end + local idx=1 + for i=1,10 do + local db=dbname(i) + kvdb.set(db,"A",idx) + idx=idx+1 + kvdb.set(db,"B",idx) + idx=idx+1 + end + for i=1,10 do + local db=dbname(i) + print(db,kvdb.get(db,"A"),kvdb.get(db,"B")) + end end) diff --git a/test/testservice/kvdb.lua b/test/testservice/kvdb.lua index 5dcd695d..a1a676ac 100644 --- a/test/testservice/kvdb.lua +++ b/test/testservice/kvdb.lua @@ -3,13 +3,12 @@ local service = require "skynet.service" local kvdb = {} --- service.address is the default address registered by itself. -function kvdb.get(key) - return skynet.call(service.address, "lua", "get", key) +function kvdb.get(db,key) + return skynet.call(service.query(db), "lua", "get", key) end -function kvdb.set(key, value) - skynet.call(service.address, "lua", "set", key , value) +function kvdb.set(db,key, value) + skynet.call(service.query(db), "lua", "set", key , value) end -- this function will be injected into an unique service, so don't refer any upvalues @@ -36,8 +35,8 @@ local function service_mainfunc(...) end) end -skynet.init(function() - service.new("kvdb", service_mainfunc, "Service Init") -end) +function kvdb.new(db) + return service.new(db, service_mainfunc, "Service Init") +end return kvdb