Codeigniter:太多的 ajax 调用导致 Web 应用程序超时

Posted

技术标签:

【中文标题】Codeigniter:太多的 ajax 调用导致 Web 应用程序超时【英文标题】:Codeigniter: too many ajax calls is causing web application timeout 【发布时间】:2016-02-22 00:22:13 【问题描述】:

我有一个 Web 应用程序,其中有一个“投票”按钮。 “投票”按钮可以在 40 秒的间隔内按用户可以点击的次数。

每次点击都会创建一个异步 ajax 请求,将数据插入数据库。这适用于少数用户。当点击投票按钮的用户超过 300 人时,应用程序无法正确响应,从而导致超时错误。

请告诉我 ant 绕过问题的建议。

请注意,CPU 使用率几乎是 50%。

【问题讨论】:

为什么不为每个用户只发送一次 ajax 请求来处理他在 40 秒内点击了多少次投票按钮? 感谢您的评论。问题是我们需要实时的结果。我们需要知道每一秒的进度。 Ajax 并不适合任何实时技术。考虑使用例如 websockets 也许我会试一试。你知道用 php 或 codeigniter 实现 websockets 的好库吗? 试试这个:socketo.me 【参考方案1】:

试试这个代码, 将此粘贴到您的脚本中,然后使用 ajax_call 而不是 $.ajax

$(function()
    window.queue = $.jqmq(
        delay   : -1,
        batch   : 2,
        callback:function(options)
            $.each(options,function(i,option)
                $.ajax(
                    url         : option.url,
                    type        : option.type,
                    data        : option.data,
                    dataType    : option.dataType,
                    beforeSend  : function()
                        option.beforeSend();
                    ,
                    success     : function(result)
                        option.success(result);
                    ,
                    error       : function(xhr,status, error)
                        option.error(xhr,status, error);
                    ,
                    complete    : function()
                        queue.next(false);
                    
                );
            );
        ,
        complete:function() 
            console.log("done");
        
    );
);
var ajax_call = function(data)
    var _defaults = 
        url         : "",
        data        : ,
        type        : "post",
        dataType    : "",
        beforeSend  : _default_beforeSend,
        success     : _default_success,
        error       : _default_error
    

    var options = $.extend(_defaults,data);

    if(options.url != '')
        queue.add(options);
    
    else
        alert("Url is not defined in ajax_call");
    

var _default_success = function()
    alert("Please define 'success' funciton in ajax_call for remove this alert!");

var _default_beforeSend = function()
    alert("Please define 'beforeSend' funciton in ajax_call for remove this alert!");

var _default_error = function()
    alert("Please define 'error' funciton in ajax_call for remove this alert!");

【讨论】:

以上是关于Codeigniter:太多的 ajax 调用导致 Web 应用程序超时的主要内容,如果未能解决你的问题,请参考以下文章

尝试在codeigniter中使用ajax提交表单

Codeigniter 中的 Ajax 调用

判断帖子是不是来自codeigniter中的ajax调用的方法?

使用 ajax 调用加载视图 codeigniter

Codeigniter 会话因 ajax 调用而出错

使用 ajax 调用 CodeIgniter 模型