我有两个页面来测试实时通信:"client1"answers"client2"。两个页面每隔500毫秒运行相同代码的不同ajax调用(动作)。
<script type="text/javascript">
var urlBase = "<?php echo Request::root(); ?>"
$(function(){
function requestData1() {
$.ajax({
url: urlBase + '/session/ajaxData1',
success: function(point) {
setTimeout(requestData1, 500);
},
cache: false
});
}
requestData1();
});
</script>
在我的控制器中,我只是将数据传递给redis。
public function ajaxData1()
{
header("Content-type: text/json");
$x = time() * 1000;
$y = rand(0, 100);
$ret = array($x, $y);
$redis = LRedis::connection();
$arrayJson = array();
array_push($arrayJson, array('"user"' => 'user2') + array('"data"' => $ret));
$redis->publish('message1', json_encode($arrayJson));
}
一段时间后,Laravel自动注销我。如果我将setTimeout设置为2000,一切都会正常工作。为什么会发生这种情况?当我从真正的来源(设备)获得数据时,它会是一样的吗?
解决这个问题的方法是使用数据库会话存储。
http://laravel.com/docs/4.2/session的数据库会话
从那以后,我没有遇到过一次强制登出,尽管之后我没有花任何时间进一步调查原始问题。人生苦短。
有时会发生csrf token。您必须使用post方法传递CSRF令牌。
请参阅示例以解决令牌相关问题。
ajax: {
url: '{{url("registration/get-list")}}',
method: 'POST',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
},