GatewayWorker session读取失败

leaboy

[attach]539[/attach]

如图:
1的时候会写入session,打印出来是有数据的
2的时候读取session就为null了

这种情况偶尔会出现,多次出现在服务重新启动后,不知道是什么情况

但是正常的websocket连接没有这个问题

2938 7 0
7个回答

walkor

stream_socket_client是连的workemran么?
没看到哪里有操作session,
如何知道session没了?

  • 暂无评论
leaboy

这个是其它项目的client端

服务端代码:

[attach]541[/attach]

[attach]542[/attach]

上面的1会执行online方法,2会执行filter方法

  • 暂无评论
walkor

session 存储是异步的,有轻微延迟,如果客户端瞬间发送多个请求,请求间有session依赖,可能会遇到上个请求设置的session,下个请求读不到的情况。

可以用Gateway::getSession来同步获取session解决这个问题。
$_SESSION = Gateway::getSession($client_id);

  • 暂无评论
leaboy

好的,我试下

  • 暂无评论
leaboy
    $_SESSION = Gateway::getSession($client_id);    // 同步session
    echo 'filter('.$client_id.'): ' . json_encode($_SESSION), PHP_EOL;

filter方法改成这样取到的$_SESSION就一直是null了

  • 暂无评论
leaboy

websocket的正常请求不管加不Gateway::getSession()都没问题

  • 暂无评论
leaboy

[attach]543[/attach]
已解决,client端最后一次请求加上一个fgets就好了,具体原因不详(开始以为是请求后马上close了导致session被清除,后来试着加了sleep再close也不行)

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