ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Ajax和PHP进行长轮询 – Apache冻结

2019-05-29 15:20:29  阅读:235  来源: 互联网

标签:apache php ajax long-polling


我们尝试在公司的ERP中实施基于长轮询的通知服务.与Facebook通知类似.

使用的技术:

> PHP的超时设置为60秒,并在每次循环迭代中休眠1秒.
>用于AJAX处理的jQuery.
> Apache作为Web服务器.

经过近一个月的编码,我们去了生产.部署后几分钟我们不得不回滚所有内容.事实证明,我们的服务器(8个核心)无法处理来自20名员工的长请求,每个使用约5个浏览器选项卡.
例如:用户使用我们的ERP打开了3个选项卡,每个选项卡上都有一个长轮询AJAX.打开第4个选项卡是不可能的 – 它会挂起,直到前3个中的一个被杀死(因此AJAX停止).

我们认为,“Apache限制”.所以我们去谷歌搜索.我找到了一些关于Apache的MPM模块和配置的信息,所以我试了一下.我们的服务器使用prefork MPM,如apachectl -l所示.所以我在config中更改了几行,看起来像这样:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       16
    MaxSpareServers      32
    ServerLimit          50%
    MaxClients          150
    MaxClients           50%
    MaxRequestsPerChild   0
</IfModule>

有趣的是,它可以在我的本地机器上使用类似的配置.在服务器上,看起来Apache忽略了配置,因为MinSpareServers设置为16,重启后会激活8.你不知道该怎么做.

解决方法:

Passerby在上一篇文章的第一条评论中给了我很好的指导,看看我们是否达到了与一台服务器的最大浏览器连接.

事实证明,每个浏览器都有这些限制,你不能改变它们(据我所知).
我们做了一个解决方法,使其工作.

我们假设我从中获取了AJAX数据

http://domain.com/ajax

为了避免达到最大浏览器连接,每个长轮询AJAX连接到随机子域,如:

http://31289.domain.com/ajax
http://43289.domain.com/ajax

等等. DNS服务器上有一个从* .domain.com指向domain.com的通配符,子域是唯一的随机数,由JS在每个选项卡上生成.

有关更多信息,请查看this thread.

AJAX Same Origin Security也存在一些问题,但我们设法在JS和PHP方面使用适当的头文件来解决它.

如果您想了解更多关于标题的信息,请查看here on StackOverflowhere on Mozilla Developer’s page.谢谢!

标签:apache,php,ajax,long-polling
来源: https://codeday.me/bug/20190529/1178654.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有