On Tue, Jan 16, 2018 at 1:09 AM, Daniel Stenberg <[email protected]> wrote:
> On Mon, 15 Jan 2018, Michael Kilburn wrote: > > It doesn't seem to work for me -- I've crated a shared cache of easy >> handles, after thread is done sending data, it returns handle (CURL*) into >> cache (actually, stack). But on server side accept queue size is always >> 20-30 while client is sending data (and performance has barely changed). >> > > I'm sorry but I don't understand what you're trying to achieve nor how you > do it. Hmm... did I accidentally delete a portion of message? It is definitely hard on eyes. My apologies :) I've created a cache (an instance of std::stack<CURL*>) protected by mutex. Each thread (in order to send data out) tries to get a handle from cache first (and if not -- creates it using related libcurl function). Once thread is done (with sending data) -- handle gets pushed into the cache. curl_easy_setopt(CURLOPT_WRITEFUNCTION, ...) // func discards incoming >> data >> > > I trust this callback return the correct value still? Otherwise it'll > probably cause the connection to get closed. > Yes, everything works as intended. Only problem is that (judging by accept queue size) tcp connections and (judging by high CPU usage) TLS sessions don't get reused. > curl_easy_perform() >> > > In the easy interface (that you are using when _easy_perform is called), > the connection cache is held in the easy handle so unless you share the > connection cache between handles you must make sure to re-use a handle that > was previously used to communicate with the same host as otherwise it won't > have the previous connection in its cache... all threads talk to the same server (same url). I expected that if I reuse easy handles between my "post_data()" invocations -- it'll lead to reuse of underlying tcp connection (and TLS sessions). > Maybe one of these options prevent tcp connection (and related TLS session >> key) from being reused? >> > > Connections can also get closed by the server's decisions. You might have solved my problem right here. I am testing all this using BaseHTTPServer and ssl python modules -- it is quite likely BaseHTTPServer closes connection after each POST. I bet ssl module doesn't support TLS session caching too. Good thing in prod environment I have a real web server. Hmm... need to figure out how to ensure both caching mechanisms are ON. Thank you for help, Daniel. Regards, Michael.
------------------------------------------------------------------- Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html
