Chào mọi người.
Mình đang tối ưu cho webserver sử dụng Windows Server 2003 và chạy Plesk.
Webserver hỗ trợ CGI, FastCGI và ISAP. Theo mình thấy:
- CGI thì web load rất chậm vì CGI chiếm nhiều tài nguyên
- ISAPI quá tuyệt, nhanh nhưng lâu lâu nó phát sinh "PHP has encountered an Access Violation at 7D611952" và lỗi này mình thử search google mà vẫn chưa thấy giải pháp cho nó
- FastCGI cũng nhanh không kém nhưng khi request đến server, data nó phản hồi về không phải chia ra nhiều đợt mà phải xử lý hết tất cả sau đó nó mới trả về 1 lần.
Bây giờ nếu muốn nhanh thì mình phải chọn ISAPI hoặc FCGI nhưng ISAPI thì xuất hiện cái lỗi kia.
Giờ chỉ còn FCGI là mình thấy ổn nhất nhưng kiểu phản hồi lại data khi mình request nó không chia ra nhiều đợt. Vậy làm sao để FCGI có thể chia ra nhiều đợt như CGI hay ISAPI.
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under Offline
LlyKil wrote:
Chào mọi người.
Mình đang tối ưu cho webserver sử dụng Windows Server 2003 và chạy Plesk.
Webserver hỗ trợ CGI, FastCGI và ISAP. Theo mình thấy:
- CGI thì web load rất chậm vì CGI chiếm nhiều tài nguyên
- ISAPI quá tuyệt, nhanh nhưng lâu lâu nó phát sinh "PHP has encountered an Access Violation at 7D611952" và lỗi này mình thử search google mà vẫn chưa thấy giải pháp cho nó
- FastCGI cũng nhanh không kém nhưng khi request đến server, data nó phản hồi về không phải chia ra nhiều đợt mà phải xử lý hết tất cả sau đó nó mới trả về 1 lần.
Bây giờ nếu muốn nhanh thì mình phải chọn ISAPI hoặc FCGI nhưng ISAPI thì xuất hiện cái lỗi kia.
Giờ chỉ còn FCGI là mình thấy ổn nhất nhưng kiểu phản hồi lại data khi mình request nó không chia ra nhiều đợt. Vậy làm sao để FCGI có thể chia ra nhiều đợt như CGI hay ISAPI.
Cảm ơn mọi người.
Tôi không hiểu ý bồ đoạn màu đỏ ở trên. "Chia ra làm nhiều đợt" là sao?
What bringing us together is stronger than what pulling us apart.
Ví dụ đơn giản thế này, khi mình cho 1 vòng lặp echo 'abc'; khoảng 1000 lần. Khi chạy từ browser http://abc.com/abc.php chẳng hạn. Nó xử lý và trả kết quả về 1 lượt chứ không hiện kết quả theo từng lượt cho đên hết.
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under Offline
LlyKil wrote:
Ví dụ đơn giản thế này, khi mình cho 1 vòng lặp echo 'abc'; khoảng 1000 lần. Khi chạy từ browser http://abc.com/abc.php chẳng hạn. Nó xử lý và trả kết quả về 1 lượt chứ không hiện kết quả theo từng lượt cho đên hết.
Cái này là do chế độ KeepAlive trên apache và chế độ dùng absolute URL hay relative URL chớ chẳng phải do FCGI đâu. Vả lại trình duyệt bình thường và người dùng bình thường thì không có chuyện vòng lặp 1000 lần rồi.
What bringing us together is stronger than what pulling us apart.
Thực ra vấn đề này hơi khó giải thích vì đây chỉ là chi tiết nhỏ trong cách "trả lời" request. Cụ thể thì mình đã mô tả như trên.
Tuy không ảnh hưởng gì đến quá trình xử lý hay trả kết quả từ webserver về nhưng mình cũng muốn tìm hiểu.
Mình chỉ thắc mắc là vì sao nếu chuyển sang CGI hay ISAPI thì không như vậy. Có lẽ đây là đặc tính/kiểu riêng của FCGI.
Thực ra vấn đề này hơi khó giải thích vì đây chỉ là chi tiết nhỏ trong cách "trả lời" request. Cụ thể thì mình đã mô tả như trên.
Tuy không ảnh hưởng gì đến quá trình xử lý hay trả kết quả từ webserver về nhưng mình cũng muốn tìm hiểu.
Mình chỉ thắc mắc là vì sao nếu chuyển sang CGI hay ISAPI thì không như vậy. Có lẽ đây là đặc tính/kiểu riêng của FCGI.
Cảm ơn conmale đã reply cho thread này.
Lý do nó là vì server không hơi đâu mà trả về client từng byte data mà nó phải có 1 buffer để lưu lại output từ script, khi đầy buffer nó trả về 1 lần luôn thì hiệu xuất sẽ tốt hơn nhiều so với việc cứ có byte nào thì trả về byte đó.
Thông thường thì với CGI, server nó giao lại hết execution cho CGI nên gần như CGI script có data gì là server nó trả lại cho client ngay nên bạn thấy data nó ra từ từ. ISAPI thì tôi không rõ lắm, nhưng FCGI thì mặc định nó đã có cái output buffer rồi nên nó sẽ không trả về client từ byte đâu mà đợi đầy buffer (hoặc script kết thúc) nó mới trả về luôn 1 lần.
Mà nhìn qua thì có vẻ như server của bạn là Win, chạy IIS? Nếu không có nhu cầu chạy ASP/.NET mà chỉ chạy PHP thôi thì sao không sử dụng Apache?
Thực ra vấn đề này hơi khó giải thích vì đây chỉ là chi tiết nhỏ trong cách "trả lời" request. Cụ thể thì mình đã mô tả như trên.
Tuy không ảnh hưởng gì đến quá trình xử lý hay trả kết quả từ webserver về nhưng mình cũng muốn tìm hiểu.
Mình chỉ thắc mắc là vì sao nếu chuyển sang CGI hay ISAPI thì không như vậy. Có lẽ đây là đặc tính/kiểu riêng của FCGI.
Cảm ơn conmale đã reply cho thread này.
Lý do nó là vì server không hơi đâu mà trả về client từng byte data mà nó phải có 1 buffer để lưu lại output từ script, khi đầy buffer nó trả về 1 lần luôn thì hiệu xuất sẽ tốt hơn nhiều so với việc cứ có byte nào thì trả về byte đó.
Thông thường thì với CGI, server nó giao lại hết execution cho CGI nên gần như CGI script có data gì là server nó trả lại cho client ngay nên bạn thấy data nó ra từ từ. ISAPI thì tôi không rõ lắm, nhưng FCGI thì mặc định nó đã có cái output buffer rồi nên nó sẽ không trả về client từ byte đâu mà đợi đầy buffer (hoặc script kết thúc) nó mới trả về luôn 1 lần.
Mà nhìn qua thì có vẻ như server của bạn là Win, chạy IIS? Nếu không có nhu cầu chạy ASP/.NET mà chỉ chạy PHP thôi thì sao không sử dụng Apache?
Trước tiên mình cảm ơn bạn đã giải đáp giúp thắc mắc.
*Ở trên mình đã nói mình sử dụng server Win và chạy Plesk (Plesk sử dụng IIS).
Vì mình đã lỡ install Plesk nên giờ lại lười unsinstall để làm lại.
Thế còn FCGI mình có thể set buffer để nó trả kết quả xử lý về từ từ được chứ?