GatewayWorker出现个无法复现奇怪的问题

scan_z

GatewayWorker搭了个WebSocket,在start_gateway.php把客户端IP记录到了$_SESSION里面(获取不到有默认值),并且在onMessage把登录后的用户IP和设备信息写到了数据库,onMessage 、 onClose 都打了登录后用户日志,每天大概十万个登录的用户里面会出现10个左右在onMessage里面获取不到IP等情况,并且这些用户没有触发过onClose,通过客户端传来的设备来看出问题的99%都是iPhone 6、 iPhone 7 、iPhone 8、iPad、iPhone X ,但是用户大多数是安卓手机,苹果系统里面iPhone 11比例较多却没有问题,查出问题的用户登录记录基本只有一次出问题,其他段时间登录记录都正常能获取到IP,onClose也有断开日志,请问大概是什么原因有可能造成这个情况?

1128 3 0
3个回答

scan_z

我猜想的一种可能:用户连接后把设备信息发给了过来,onMessage里面正在处理着数据写到数据库的这个时候用户断开了,导致onMessage获取不到用户$_SESSION的IP,由于用户断开了onClose里面也获取不到$_SESSION用户信息所以也没写成功日志。

  • 暂无评论
walkor

IP记录再$_SESSION是在onMessage里记录的?有可能客户端连上了,然后没发任何信息就断开了,所以没出发onMessage,没有写入数据

  • scan_z 2020-10-19

    IP在start_gateway.php文件记录到了$_SESSION里,且在 onMessage客户端发消息过来时通过$_SESSION取得写到数据库,10万个用户里面 可能会出现10个在onMessage里面 获取不到IP的情况,是否是用户刚好发消息来onMessage正在处理的时候断开了,然后处理到通过$_SESSION取IP的时候$_SESSION记录的东西没了。

walkor

IP是在onMessage里写到session里的还是在onConnect写到session里的?

是否是用户刚好发消息来onMessage正在处理的时候断开了,然后处理到通过$_SESSION取IP的时候$_SESSION记录的东西没了。

有这个可能

  • 暂无评论
年代过于久远,无法发表回答
🔝