Hi Christian, I wanted to use external threads because my system has the following constraints: 1) One connection per thread: the response to the client is time critical and I cannot afford that a connection delays another one. 2) Many listening sockets are opened, hence many MHD daemon: some for HTTP and some for HTTPS. 3) Up to 2000 concurrent connections (shared between HTTP and HTTPS).
As I don't know how the traffic will be shared amongst the daemons, I would need to configured each MHD daemon with epoll and 2000 threads. This solution does not scale. Just imagine the number of threads created at start up or debugging a single HTTP request with gdb. The best solution would be to share the worker threads pool between the daemons but if I understand correctly the current implementation does not allow it. This why I fall back on external thread: I create 2000 daemons for each listening socket and dispatch the HTTP/HTTPS request to a pool of 2000 threads, which reuse the daemons. Is there a plan to implement worker threads sharing between daemons? If not, are there other MHD solutions that I miss? Thanks, Louis Le 05/03/15, Christian Grothoff <[email protected]> a écrit : > Hi! > > I had no plans for an 'external poll' API, as we have epoll() which is > better for very large FDsets (as long as you're on Linux). Also, > redefining FD_SETSIZE is also IMO a very good possibility. > > Regardless, select/poll with > 1024 FDs and external mode is likely not > the greatest idea from a scalability/performance perspective: if you > have that many concurrent / open FDs, you really want epoll() and > possibly think about using threads / thread pool for processing. > > Happy hacking! > > Christian > > On 03/04/2015 10:22 PM, [email protected] wrote: > > Hi, > > > > I would like to use the external select mode, as I need to manage the > > connection threads externally. > > Because there could be much more than 1024 FDs used at run time, I cannot > > use MHD_get_fdset() and select (). > > Apart from redefining FD_SETSIZE, are there other ways to use external > > threads when FD > 1024? > > If not, is there a plan to add an MHD_get_poll_event API, the poll version > > of MHD_get_fdset()? > > > > Thanks, > > > > Louis Benoit > > > > >
