为什么laravel会在我运行两次ajax调用

时间:2015-05-25 07:04:17

标签: php laravel redis laravel-5

我有两个页面来测试实时通信:“client1”和“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,一切正常。为什么会这样?当我从真实来源(设备)获取数据时它会是一样的吗?

2 个答案:

答案 0 :(得分:1)

解决此问题的解决方案是使用数据库会话存储。

http://laravel.com/docs/4.2/session#database-sessions

我从未进行过一次强制退出,尽管我之后没有花时间进一步调查原始问题。生命太短暂了。

答案 1 :(得分:1)

有时会发生 csrf令牌。你必须使用post方法传递csrf标记。

请参阅示例以解决与令牌相关的问题。

            ajax: {
                url: '{{url("registration/get-list")}}',
                method: 'POST',
                headers: {
                    'X-CSRF-TOKEN': '{{ csrf_token() }}'
                }
            },