问题重现:
模拟一客户端成功与服务器建立连接
事先在 Events::onConnect 中调用 Gateway::bindUid
Events::onClose 中调用 Gateway::getUidByClientId
模拟断开客户端连接,结果 Gateway::getUidByClientId 返回空值null
[attach]1194[/attach]
问题调试:
如图 return 断点调试,发现能如期获取到映射的uid, 个人理解原因是:
$this->sendToWorker 异步通知 Events,BusinessWorker异步收到转发来的数据,
导致 Events::onClose 业务逻辑可能尚未执行,而断点后的清理代码已经先行执行完毕了,
不知道理解是否正确?如果理解正确,那么如题如何正确获取到映射uid?
期望结果:
期望业务逻辑执行完成后,再行断点后的后续清理工作。
是的,连接断开后Gateway会立刻清理对应连接的数据,包括uid绑定数据。
在手册中有提到,onClose回调中无法使用此接口,按照手册方法用session来获得
那这个问题有什么解决方案吗? 我也碰到了,目前我想的是在gateway里也存一个session