参考watchdog写的一个登陆网关,不过加上了sprotobuf和数据加密,第一个tcp数据包上来的是subid,我在watchdog 的data方法里面验证处理,如果通过了,就开始一个agent,把socket 数据转发到那边去。
现在一个用户的时候,正常,如果多个连接,会出现下面的错误,不是每次都出现,有一定的概率。
agent[fd] = skynet.newservice("adminagent")
skynet.call(agent[fd], "lua", "start", {gate = gate, client = fd, watchdog = skynet.self(), secret = admin.secret})
LAUNCH snlua adminagent
[:00000009] 2018-09-11 11:12:27 [admin_logon] gate:10, client:16, watchdog:9, room:1000, uid:1 -- 这一行是我自己打的log。吧
[:00000009] lua call [18 to :9 : 9 msgsz = 0] error : ./skynet/lualib/skynet.lua:643: ./skynet/lualib/skynet.lua:197: ./skynet/lualib/skynet.lua:371: call failed
stack traceback:
[C]: in function 'error'
./skynet/lualib/skynet.lua:371: in upvalue 'yield_call'
./skynet/lualib/skynet.lua:388: in function 'skynet.manager.call'
./services/watchdog.lua:70: in upvalue 'admin_logon'
./services/watchdog.lua:83: in local 'f'
./services/watchdog.lua:153: in upvalue 'f'
./skynet/lualib/skynet.lua:154: in function <./skynet/lualib/skynet.lua:126>
stack traceback:
[C]: in function 'assert'
./skynet/lualib/skynet.lua:643: in function 'skynet.manager.dispatch_message'
望云大帮忙看下。非常感谢。