问题
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.
回答1:
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
ormod_fcgi
module, but those mods aren't as popular/widely used with Apache 2.4. - If you have
mod_deflate
enabled and don't setSetEnv 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.
来源:https://stackoverflow.com/questions/30707792/how-to-disable-buffering-with-apache2-and-mod-proxy-fcgi