티스토리 뷰

WEB2.0/프로그래밍

flush는 mod_gzip일때 안됩니다.

나를찾는아이 2011. 1. 18. 10:43
728x90
반응형
최근 comet서버를 구축하고 있는데 flush()함수가 제대로 동작을 안해 삽질을 무지하게 했네요.

저같이 삽질하는 분이 없도록 경험 공유합니다 ㅠ


php에서 flush() 함수는 담겨있던 버퍼를 방출하는 역할을 하는 함수 입니다.

보통 브라우저는 서버에서부터 받은 데이터를 모아두었다가

데이터를 다 받게 되면 화면에 렌더링을 하는데

flush() 함수를 통해서 사용자가 해당 페이지의 모든 데이터를 수신하지 않았더라도

화면에 출력을 할수 있습니다.



이러한 특성으로 gzip이라는 압축전송을 통해

서버는 데이터를 압축해서 적은 용량을 빠르게 클라이언트에게 보내면

클라이언트가 이 압축된 데이터를 받아서 압축을 풀고 사용자 화면에 렌더링을 하면

사용자가 느끼는 체감시간을 줄이는 효과를 볼 수 있습니다.


그래서 아마도 아파치 서버나, 어플리케이션단에서

gzip으로 데이터를 압축하여 보내는 분들도 많이 계실겁니다.


제가 운영하는 서버도 gzip 모듈이 활성화가 되어있는 상황입니다.


flush()로 버퍼의 데이터를 출력하려고 하는데 이상하게도 계속 출력이 되지 않는 것이 삽질의 시작이었습니다.

왜 안나오는건지 계속 돌아다니다 한참만에 php document에서 그 원인을 찾았네요.

Server modules for Apache like mod_gzip may do buffering of their own that will cause flush() to not result in data being sent immediately to the client.



뭐 결론은 mod_gzip이 flush()의 결과를 즉시 보여주지 않을 수 있다고 하는 내용입니다.

덕분에 한참 동안 삽질을 했네요.


이 문제를 해결하기 위해선 서버에서 conf 파일을 수정해주어도 되고

어플리케이션단에서

@apache_setenv('no-gzip', 1);

를 통해 gzip을 사용안할 수 있습니다.


휴 이제 flush()가 잘 작동하네요.

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함