[attach]539[/attach]
如图: 1的时候会写入session,打印出来是有数据的 2的时候读取session就为null了
这种情况偶尔会出现,多次出现在服务重新启动后,不知道是什么情况
但是正常的websocket连接没有这个问题
stream_socket_client是连的workemran么? 没看到哪里有操作session, 如何知道session没了?
这个是其它项目的client端
服务端代码:
[attach]541[/attach]
[attach]542[/attach]
上面的1会执行online方法,2会执行filter方法
session 存储是异步的,有轻微延迟,如果客户端瞬间发送多个请求,请求间有session依赖,可能会遇到上个请求设置的session,下个请求读不到的情况。
可以用Gateway::getSession来同步获取session解决这个问题。 $_SESSION = Gateway::getSession($client_id);
好的,我试下
$_SESSION = Gateway::getSession($client_id); // 同步session echo 'filter('.$client_id.'): ' . json_encode($_SESSION), PHP_EOL;
filter方法改成这样取到的$_SESSION就一直是null了
websocket的正常请求不管加不Gateway::getSession()都没问题
[attach]543[/attach] 已解决,client端最后一次请求加上一个fgets就好了,具体原因不详(开始以为是请求后马上close了导致session被清除,后来试着加了sleep再close也不行)
stream_socket_client是连的workemran么?
没看到哪里有操作session,
如何知道session没了?
这个是其它项目的client端
服务端代码:
[attach]541[/attach]
[attach]542[/attach]
上面的1会执行online方法,2会执行filter方法
session 存储是异步的,有轻微延迟,如果客户端瞬间发送多个请求,请求间有session依赖,可能会遇到上个请求设置的session,下个请求读不到的情况。
可以用Gateway::getSession来同步获取session解决这个问题。
$_SESSION = Gateway::getSession($client_id);
好的,我试下
filter方法改成这样取到的$_SESSION就一直是null了
websocket的正常请求不管加不Gateway::getSession()都没问题
[attach]543[/attach]
已解决,client端最后一次请求加上一个fgets就好了,具体原因不详(开始以为是请求后马上close了导致session被清除,后来试着加了sleep再close也不行)