|
@@ -0,0 +1,60 @@
|
|
1
|
+-- 代理服务
|
|
2
|
+-- 用法 skynet.newservice("proxySrv", "被代理服务", ”代理数量“, "注册服务名字", "是否远程调用", ... 服务启动参数)
|
|
3
|
+
|
|
4
|
+require "skynet.manager"
|
|
5
|
+local skynet = require "skynet"
|
|
6
|
+local cluster = require "skynet.cluster"
|
|
7
|
+
|
|
8
|
+local balance = 1
|
|
9
|
+local addresList = {}
|
|
10
|
+local serParam = table.pack(...)
|
|
11
|
+local sername, sernum, regname, remove = serParam[1], tonumber(serParam[2]), serParam[3], serParam[4]
|
|
12
|
+
|
|
13
|
+skynet.register_protocol {
|
|
14
|
+ name = "system",
|
|
15
|
+ id = skynet.PTYPE_SYSTEM,
|
|
16
|
+ unpack = function (...) return ... end,
|
|
17
|
+}
|
|
18
|
+
|
|
19
|
+local forwardMap = {
|
|
20
|
+ [skynet.PTYPE_SNAX] = skynet.PTYPE_SYSTEM,
|
|
21
|
+ [skynet.PTYPE_LUA] = skynet.PTYPE_SYSTEM,
|
|
22
|
+ [skynet.PTYPE_RESPONSE] = skynet.PTYPE_RESPONSE, -- don't free response message
|
|
23
|
+}
|
|
24
|
+
|
|
25
|
+skynet.init(function ()
|
|
26
|
+ for i = 1, sernum do
|
|
27
|
+ addresList[i] = skynet.newservice(sername, table.unpack(serParam, 5))
|
|
28
|
+ end
|
|
29
|
+ -- 注册名字
|
|
30
|
+ if regname ~= "nil" then
|
|
31
|
+ skynet.register(regname)
|
|
32
|
+ end
|
|
33
|
+ -- 远程服务
|
|
34
|
+ if remove == "true" then
|
|
35
|
+ cluster.register(regname, skynet.self())
|
|
36
|
+ end
|
|
37
|
+end)
|
|
38
|
+
|
|
39
|
+local function getAddress()
|
|
40
|
+ local address = addresList[balance]
|
|
41
|
+ if address then
|
|
42
|
+ balance = balance + 1
|
|
43
|
+ if balance > sernum then
|
|
44
|
+ balance = 1
|
|
45
|
+ end
|
|
46
|
+ end
|
|
47
|
+ return assert(address, "get realsvr address error!")
|
|
48
|
+end
|
|
49
|
+
|
|
50
|
+skynet.forward_type(forwardMap, function()
|
|
51
|
+ skynet.dispatch("system", function (session, source, msg, sz)
|
|
52
|
+ local realsvr = getAddress()
|
|
53
|
+ if session == 0 then
|
|
54
|
+ skynet.rawsend(realsvr, "lua", msg, sz)
|
|
55
|
+ else
|
|
56
|
+ skynet.ret(skynet.rawcall(realsvr, "lua", msg, sz))
|
|
57
|
+ end
|
|
58
|
+ end)
|
|
59
|
+end)
|
|
60
|
+
|