当响应时间太长时,我收到代理错误

时间:2015-02-25 05:35:17

标签: perl catalyst

我在模型中有一个过程,它向1000多个用户发送短信,并根据响应相应地更新数据库。此过程需要一段时间才能完成。当响应回来时。我在浏览器中看到502代理错误。原因:从远程服务器读取错误 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

根据您的描述,可能会发生超时:

  1. 在应用程序服务器和远程SMS网关之间,或
  2. 在您的浏览器和应用程序服务器之间。
  3. 如果错误发生在应用程序服务器和远程消息传递网关之间

    • 如果您通过您控制的代理连接到SMS发送服务器,请尝试增加代理的连接超时
    • 如果您的服务器上设置了最长执行时间,则可能会在一定时间后终止页面呈现。
    • 尝试以较小的批次发送,以减少对邮件服务器的请求持续时间。

    减少请求持续时间(例如,通过以较小批量发送消息)将降低远程服务器或中间服务器超时的风险。它还具有以下优点:您可以在每个批次发送时更新进度。 通过缩小可能的问题编号列表,可以更容易地诊断特定收件人电话号码是否导致远程服务器出错。

    如果错误发生在您的浏览器和您的应用程序之间

    您可能正在运行从生成对浏览器的响应的同一进程发送的消息。这将阻止构建页面并快速返回给您,因此远程服务器或中间服务器可能会在您等待邮件发送完成时导致超时。

    不要等到长时间运行的操作完成后才能将页面返回到浏览器,而是开始使用消息或作业排队系统(例如GearmanRabbitMQ)会很有帮助。这些系统允许您将长时间运行的任务放入队列,以便快速生成和返回页面。通过让长时间运行的任务包括进度更新(例如,将进度写入数据库),您可以拥有一个页面,该页面将显示任务运行时的进度。

答案 1 :(得分:0)

非常简单,您只需传递代理Keepalive = On参数

例如:

http://localhost:5000/ Keepalive=On

答案 2 :(得分:0)

我找到了问题的解决方案。我不得不为此改变我的apache配置。我使用的是ProxyPass,不得不暂停10分钟并继续使用我的代理服务器。

在这里找到我的解决方案:

https://serverfault.com/questions/185894/proxy-error-502-reason-error-reading-from-remote-server-with-apache-2-2-3-de