|
Running Perl Programs with IIS
Part:
1
2
(Continued from previous part...)
perl.exe vs. perlis.dll
Instead of using perl.exe, you could also use perlis.dll to run your Perl programs
through IIS. perlis.dll is the DLL of Perl for ISAPI.
The advantage of using PerlIS.dll is that IIS will only need to load
PerlIS.dll into memory once, therefore much quicker to run the next Perl program
if requested.
To try Perl for ISAPI, I decided to
configure IIS to run *.plx files in cgi-bin with perlis.dll. I repeated
the steps
described in the previous section to add another entry into the Application
Mappings:
Executable: c:\perl\bin\perlis.dll
Extension: .plx
Verbs: All verbs
Script Engine: Checked
Then I changed Changed helloHttp.pl to helloHttp.plx:
print "Content-Type: text/html\n\n";
print "<html><body>\n";
print "Hello world!\n";
print "</html></body>\n";
Checked with IE on http:\\localhost\cgi-bin\helloHttp.plx, and got the output correctly.
To compare the performance difference between perl.exe and perlis.dll, I used
the following Java program. This program is doing a single HTTP request to
a specified Web page, and repeating this for many times.
/**
* HttpResponseTest.java
* Copyright (c) 2002 by Dr. Herong Yang. All rights reserved.
*/
import java.io.*;
import java.net.*;
public class HttpResponseTest {
public static void main(String[] args) {
int numberOfTests = 1;
if (args.length > 0) numberOfTests
= Integer.valueOf(args[0]).intValue();
long t1 = System.currentTimeMillis();
String result = "";
for (int nTest=1; nTest<=numberOfTests; nTest++) {
result = test(args);
}
long t2 = System.currentTimeMillis();
long t = t2 - t1;
PrintStream out = System.out;
out.println("Performace Information:");
out.println(" Number of tests = " + numberOfTests);
out.println(" Time = " + (t/1000) + " seconds.");
out.println("Rerulst of Last Test:");
out.println(result);
}
public static String test(String[] args) {
String path = "/index.html";
int port = 80;
String host = "localhost";
if (args.length > 1) path = args[1];
if (args.length > 2) port
= Integer.valueOf(args[2]).intValue();
if (args.length > 3) host = args[3];
String result = "";
try {
Socket c = new Socket(host,port);
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(
c.getOutputStream()));
BufferedReader r = new BufferedReader(new InputStreamReader(
c.getInputStream()));
String m = "GET "+path;
w.write(m,0,m.length());
w.newLine();
w.flush();
while ((m=r.readLine())!= null) {
result = result + m + "\n";
}
w.close();
r.close();
c.close();
} catch (IOException e) {
System.err.println(e.toString());
}
return result;
}
}
Here is the output my first test:
\j2sdk1.4.1_01\bin\java -cp . HttpResponseTest 1 /cgi-bin/helloHttp.pl
Performace Information:
Number of tests = 1
Time = 0 seconds.
Rerulst of Last Test:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 23 Dec 2002 19:39:09 GMT
Content-Type: text/html
<html><body>
Hello world!
</body></html>
I repeated the tests by changing the controlling parameters.
The following table shows the results comparing with similar tests I did
with other technologies:
Number Debug Time
Cases of Tests Mode (Sec) Note
1. 1000 No 2 Static text with IIS 5.0
2. 2000 No 4 Static text with IIS 5.0
3. 1000 No 6 ASP page with IIS 5.0
4. 2000 No 11 ASP page with IIS 5.0
5. 1000 ? 7 Static text with Tomcat 4.1.18
6. 2000 ? 15 Static text with Tomcat 4.1.18
7. 1000 ? 8 JSP page with Tomcat 4.1.18
8. 2000 ? 16 JSP page with Tomcat 4.1.18
9. 1000 ? 25 perl.exe 5.6.1 with IIS 5.0
10. 2000 ? 47 perl.exe 5.6.1 with IIS 5.0
11. 1000 ? 12 perlis.dll 5.6.1 with IIS 5.0
12. 2000 ? 24 perlis.dll 5.6.1 with IIS 5.0
Conclusion:
- Obviously, perl.exe is 2 times slower than perlis.dll.
So I changed the configuration on IIS to map *.pl files to perlis.dll.
- Perl is slower than JSP and ASP.
Part:
1
2
|