banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows CGI, FCGI & ISAPI  XML
  [Question]   CGI, FCGI & ISAPI 11/08/2010 19:37:10 (+0700) | #1 | 218178
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
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.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 12/08/2010 03:40:28 (+0700) | #2 | 218200
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 13/08/2010 14:34:25 (+0700) | #3 | 218297
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
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.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 13/08/2010 14:42:34 (+0700) | #4 | 218299
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

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.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 15/08/2010 03:26:16 (+0700) | #5 | 218381
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
Bởi vì nếu mình chuyển qua CGI hay ISAPI thì nó hoạt động đúng như mình nói. Để mình minh hoạ. Ví dụ ta có 1 đoạn code sau

for ($i = 1; $i <= 10; $i++) {
echo $i;
sleep(1);
}


Nếu mình chuyển sang CGI/ISAPI thì cách trả kết quả của nó như sau:
Sau 1s: 1
Sau 2s: 12
Sau 3s: 123
...
Sau 10s: 12345678910

Nhưng nếu mình lại chuyển sang FCGI thì cách trả kết quả của nó:
Sau 1s, 2s, 3s, ... 9s: (không có gì)
Sau 10s: 12345678910
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 16/08/2010 08:19:49 (+0700) | #6 | 218474
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

LlyKil wrote:
Bởi vì nếu mình chuyển qua CGI hay ISAPI thì nó hoạt động đúng như mình nói. Để mình minh hoạ. Ví dụ ta có 1 đoạn code sau

for ($i = 1; $i <= 10; $i++) {
echo $i;
sleep(1);
}


Nếu mình chuyển sang CGI/ISAPI thì cách trả kết quả của nó như sau:
Sau 1s: 1
Sau 2s: 12
Sau 3s: 123
...
Sau 10s: 12345678910

Nhưng nếu mình lại chuyển sang FCGI thì cách trả kết quả của nó:
Sau 1s, 2s, 3s, ... 9s: (không có gì)
Sau 10s: 12345678910
 


Bồ thảy lên cấu hình cụ thể của FCGI của bồ xem?
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 02:25:30 (+0700) | #7 | 219384
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
[Types]
php:26333=Plesk_php5
php5:26333=Plesk_php5
phtml:26333=Plesk_php5
[Plesk_php5]
ExePath=C:\Parallels\Plesk\Additional\PleskPHP5\php-cgi.exe

Đây là cấu hình của FCGI.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 07:06:03 (+0700) | #8 | 219385
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

LlyKil wrote:
[Types]
php:26333=Plesk_php5
php5:26333=Plesk_php5
phtml:26333=Plesk_php5
[Plesk_php5]
ExePath=C:\Parallels\Plesk\Additional\PleskPHP5\php-cgi.exe

Đây là cấu hình của FCGI. 


Chịu thua. Mấy thông tin này quá ít để có thể góp ý được gì.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 11:42:17 (+0700) | #9 | 219407
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
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.
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 11:55:56 (+0700) | #10 | 219409
nbthanh
HVA Friend

Joined: 21/12/2001 14:51:51
Messages: 429
Offline
[Profile] [PM]

LlyKil wrote:
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?
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 13:02:50 (+0700) | #11 | 219414
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]

nbthanh wrote:

LlyKil wrote:
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ứ?
[Up] [Print Copy]
  [Question]   CGI, FCGI & ISAPI 30/08/2010 13:47:11 (+0700) | #12 | 219417
LlyKil
Member

[Minus]    0    [Plus]
Joined: 22/01/2008 18:33:58
Messages: 16
Offline
[Profile] [PM]
Câu trả lời cho vấn đề này là add ResponseBufferLimit=0 vào file config của FCGI smilie
Cảm ơn mọi người đã quan tâm nhé.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|