Azure HTTP request timeout workaround

2019-03-04 00:02发布

问题:

We currently have an application hosted on a Azure VM instance.

This application sometimes processes long-running and idle HTTP requests. This is causing an issue because Azure will close all connections that have been idle for longer than a few minutes.

I've seen some suggestions about setting a lower TCP keepalive rate. I've tried setting the this rate to around 45 seconds but my HTTP requests are still being closed.

Any suggestions? Our VM is running Server 2008 R2.

回答1:

As a simple workaround, I had my script send a newline character every 5 seconds or so to keep the connection alive.

Example:

set_time_limit(60 * 30);
ini_set("zlib.output_compression", 0);
ini_set("implicit_flush", 1);

function flushBuffers()
{
    @ob_end_flush();
    @ob_flush();
    @flush();
    @ob_start();
}

function azureWorkaround($char = "\n")
{
    echo $char;
    flushBuffers();
}

$html = '';
$employees = getEmployees();
foreach($employee in $employees) {
    html .= getReportHtmlForEmployee($employee);
    azureWorkaround();
}

echo $html;


回答2:

The Azure Load Balancer now supports configurable TCP Idle timeout for your Cloud Services and Virtual Machines. This feature can be configured using the Service Management API, PowerShell or the service model.

For more information check the announcement at http://azure.microsoft.com/blog/2014/08/14/new-configurable-idle-timeout-for-azure-load-balancer/