Hi Evgeny,

That's mostly how I understood it from past experience.  To use that
directly, it does require that my producer logic be written in a callback
style: like a state function that's producing a chunk of content at a time.
Secondly it must only send up to max bytes, which will require buffer
management.   So this does complicate that logic when compared to the
synchronous thread-per-request style.   My near term option appears to be
to use a worker thread that writes content into a buffer with the
appropriate concurrency control.  Eventually I would like to adopt a fiber
approach and it would be good to know if anyone has experience with that.

Erik


> Hi Erik,
> You need to create response by MHD_create_response_from_callback(). Use 
> 'MHD_SIZE_UNKNOWN'
> if size is not known in advance. When data callback is called by MHD,
> provide all data you have at that moment (but not more than requested by
> MHD of course). If you don't have any data available call
> MHD_suspend_connection(). Later, when you get new portion of data ready
> to send, call MHD_resume_connection() then data callback will be called
> automatically by MHD.
> Does it suit your needs?
> --
> Evgeny
> On 02.12.2021 21:53, Erik Smith wrote:

If I want to send a large response that takes time to generate and have the
response sent incrementally in a push style (regular write calls in
synchronous code, not callbacks) so that the client doesn't time out, how
would I do that?  Is that something I'm going to have to write some
concurrency mechanism for so that I can use a callback or is there a
simpler way?

Reply via email to