On 10/31/18 8:16 AM, Sven Van Caekenberghe wrote:
Hi Jimmie,

On 31 Oct 2018, at 14:01, Jimmie Houchin <[email protected]> wrote:

Hello,

I am writing an app which accesses a REST api. The documentation says this.

Connection Limits

To provide equal resources to all clients, we recommend limiting both the 
number of new connections per second, and the number of requests per second 
made on a persistent connection (see above/below).

For new connections, we recommend you limit this to twice per second (2/s). 
Establishing a new TCP and SSL connection is expensive for both client and 
server. To allow a better experience, using a persistent connection will allow 
more requests to be performed on an established connection.

For an established connection, we recommend limiting this to one hundred per 
second (100/s). Please see following section on       persistent connections to 
learn how to maintain a connection once it is established.

HTTP Persistent Connection

This keeps the underlying TCP connection active for multiple 
requests/responses. Subsequent requests will result in reduced latency as the 
TCP handshaking process is no longer required.

If you are using an HTTP 1.0 client, ensure it supports the keep-alive 
directive and submit the header Connection: Keep-Alive with your request.

Keep-Alive is part of the protocol in HTTP 1.1 and enabled by default on 
compliant clients. However, you will have to ensure       your implementation 
does not set the connection header to other values.



I do not know how to reuse a connection.

I see in ZnClient #canReuseConnection and #connectionReuseTimeout.

Is the timeout from connection time or last request or access time?

Does that handle everything automatically for me?

I will be accessing this api multiple times a minute, sometimes multiple times 
a second for almost all the time.

How long can I keep a persistent connection open?

What are best practices?

Any help and wisdom greatly appreciated.

Thanks.

Jimmie
Yes, Zn fully and automagically supports persistent connections.

In a first approach, just create one ZnClient instance, configure it with your 
host, etc, and then keep on reusing this instance for each (subsequent) 
request. Zn will keep client side connections open indefinitely. But a (busy) 
server will kill idle connections for sure. ZnClient will always try to connect 
again, before giving an error, so it effectively reconnects.

You can look at client side logging by inspecting

   ZnLogEvent announcer

to figure out what is happening.

One warning though: if your app is multi user / multi threaded, you will 
probably need an http client instance per session. It is possibly necessary to 
prevent mixing up authentication info as well.

HTH,

Sven

Thanks Sven. I thought that would be how it worked.

You write beautiful software. I love to try to learn from what you write.

Thanks for the pointer.

Jimmie





Reply via email to