I'm using mod_proxy_fcgi with apache 2.4 on a debian Jessie with my C++ application which does ServerSentEvents with libfcgipp.
My problem is, that apache still buffers my response data. I confirmed that it isn't buffered by the libfcgipp library by using wireshark: After starting the fcgi application via spawn-fcgi
, the data gets send to the apache web server as soon as possible. But in my browser (which I use for testing, later there will be a C++ client) it only shows up after I "killed"/closed the sending request in the server application.
So I assume I need to disable buffering for either apache or mod_proxy_fcgi (or both). But I cannot find the appropriate documentation on how to do this.
A few notes, since I just spent the past few hours experimenting to find the answer to this question:
- It's not possible to entirely disable output buffering when using
mod_proxy
/mod_proxy_fcgi
, however, you can still have responses streamed in chunks.
- It seems, based on my experimentation, that chunks have to be at least 4096 bytes before the output will be flushed to the browser.
- You can disable output buffering with the
mod_fastcgi
or mod_fcgi
module, but those mods aren't as popular/widely used with Apache 2.4.
- If you have
mod_deflate
enabled and don't set SetEnv no-gzip 1
for the virtualhost/directory/etc. that's streaming data, then gzip will not allow the buffer to flush until the request is complete.
I was testing things out to see how to best use Drupal 8's new BigPipe functionality for streaming requests to the client, and I posted some more notes in this GitHub issue.