启动一个服务后,给该服务发消息直接出错。

55 views
Skip to first unread message

刘亮

unread,
Sep 11, 2018, 12:19:24 AM9/11/18
to skynet-users
参考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'

望云大帮忙看下。非常感谢。

刘亮

unread,
Sep 11, 2018, 9:47:57 AM9/11/18
to skynet-users
排查了一个下午,目前客户端所有数据都是通过des加密后再发送的, 然后再socket.data的时候先通过netpack.tostring,然后des解密,然后再通过sproto解析,发现,如果把加密去掉,就没有问题了。怀疑是不是加密过程中,数据出了什么问题,每次都是跑一个客户端的时候没有问题,客户端一多开,就挂。

在 2018年9月11日星期二 UTC+8下午12:19:24,刘亮写道:
Reply all
Reply to author
Forward
0 new messages