项目开了两个websocket地址用相同的注册地址
192.168.100.96:5858
192.168.100.201:5858
我在websocket的onConnect时候设置了认证定时器 (我用的是GlobalTimer)// 连接到来后,定时10秒关闭这个链接,需要10秒内发认证并删除定时器阻止关闭连接的执行
$auth_timer_id = GlobalTimer::add(2, function () use ($client_id) {
//错误提示.
//发送离线提示
Send::sendToClientClose($client_id, 'server', 'Sign', 'auth', 400);
}, null, false);
$_SESSION = $auth_timer_id;
$_SESSION = $client_id;
在message里的接收第一条信息里会在成功后删除定时器,但是$_SESSION会有时候为空,而且只在多个websocket同时连接时会发生,单独一个不会发生(我是同时连接两个websocket,一直刷新页面就会出现这个问题)
因为业务逻辑以后还会更多个,甚至5-10个websocket服务器,求大佬求救啊!
如果你的session是在onMessage里设置的,那很可能为空,因为会出现只发起连接但是还没来得及发送数据连接就断开的情况。也就是onMessage根本没触发的情况。
请自行记录下日志就排查,在设置SESSION的地方记录日志,包括client_id。获取的地方也记录client_id日志。
我是在websocket连接的时候设置Session,然后websocket连接成功后,客户端会立即发送登录信息给后台,然后删除定时的时候session就为空
在onMessage里打印session为空,但是在onConnect里不为空
把整体代码发出来吧。
连接触发
连接后客户端发送第一条消息就会出现空,如果我在客户端连接后延迟100毫秒就不会出现,或者只使用一个websocket连接也不会出现
这是为了写游戏机器人 所以会模拟用户触发行为
估计你的GatewayWorker版本低了,升级试下
3.5.18的...
发个能重现问题的最精简的demo吧。代码片段看不出什么