TIdHTTPServer slowly using all connections

313 views Asked by At

Delphi 10.3.1, Indy 10.6.2.5366

We are using TIdHTTPServer in a REST service, and we have problems with the TIdHttpServer slowly using all the connections. MaxConnections is 100. When we are reaching 100 connections, no one can get any response from the service.

With netstat we can see the IP and peer port, and in OnCommandGet/OnCommandOther we are logging the IP and peer port, but none of the IP/ports matched the IP/ports in netstat with state ESTABLISHED.

But when we started also to log IP and peer port in OnConnect, we could see the IP/ports from netstat.

So now we think that some of our connections are getting stuck between OnConnect and OnCommandGet/OnCommandOther.

Not all of our customers experience this problem, but for some it only takes 2-10 days to reach the MaxConnections.

The clients to the service are mobile devices, so we think it might have something to do with the quality of the internet connection when the connection is established?!

Can we do something to prevent this from happening?

1

There are 1 answers

0
Remy Lebeau On BEST ANSWER

The OnConnect event is fired immediately when a client connects, but the OnCommand... events are not fired until a full HTTP request has been received. But you should definately be able to get viable PeerIP/PeerPort values in the OnCommand... events.

If your mobile devices are having issues with the stability of their connections, they may be dropping their end of the connections abnormally and the server's OS might not be able to react to that in a timely manner. That could certainly cause the server to end up with a bunch of dead connections on its end, at least for awhile.

In the OnConnect event, try assigning a reasonable non-infinite timeout to the AContext.Connection.ReadTimeout property, or the AContext.Binding.SetKeepAliveValues() method, and see if that helps with your issue.