Support This Project


Best Viewed With Any Browser


[ Back | Home | Page Bottom | Mail ]

What is Pi3 and Pi3Web?
What is the background of this work?
What platforms are supported?
Can Pi3Web run as a Windows NT service?
Does Pi3Web have a Windows GUI?
What are .pi3 files, configuration files or a scripting language?
What Are The Options For Server-Side Scripting?
On what platforms is Pi3Web multithreaded?
Does Pi3Web support the Keep-Alive protocol for connection reuse?
Does Pi3Web support MS-Frontpage Extensions?
What other scripting technologies are supported by Pi3Web?
Does Pi3Web support SSL?
Does Pi3Web support Servlets and JSP's?
Does Pi3Web support ISAPI extensions or filters?
Does Pi3Web support HTTP/1.1?
Does Pi3Web support file upload?
This FAQ list does not answer my questions, ideas?

What is Pi3 and Pi3Web?

Pi3 is a component based architecture framework for cross platform development of internet servers. Pi3Web is full featured, multithreaded HTTP server based on the Pi3 component architecture.

What is the background of this work?

This software was initially written by John Roy in the time period April 1996 to August 1997 as a hobby project to investigate various aspects of Internet server software development:

  • Potential for reuse via componentalization
  • Extension of existing server 'plug-in' models to make core server operation also a plugin (e.g. thread model, IO transport, etc.)
  • Use of multithreading to increase some aspects of performance
  • Cross platform development issues.

Pi3Web was driven by the desire to create an open source based, high performance, multithreaded web server with true cross platform potential.

This software was released as 0.9b1 in August 1997 after the functionality was pretty much complete and the tests scripts heavily hit the server without resource problems.

Since end of summer 1998 Holger Zimmermann took over the project succesively and after a difficult time moving the hosting site several times, the Pi3Web 2.0 was released as a first beta version in summer 2001.

I welcome all feedback, contributions, suggestions etc.

Notably lacking is a Windows GUI for configuration and installation, also top level documentation on architecture.

What platforms are supported?

Pi3Web is built to be deployable across a large number of platforms. Current status breaks into three categories:

  1. Fully supported and binary distributions are available:
    • Windows NT/95 on IBM Compatible
    • Linux ELF 2.0 on IBM Compatible
    • Solaris 2.4/2.5 on Sparc
    • Solaris 2.6 on Intel x86
    • IRIX 5.3 on Silicon Graphics

  2. Supported with trivial changes, platforms were not available to test with, binaries not available
    • Other UNIX variants (POSIX compliant)
    • Windows NT on MIPS and 68K architectures

  3. Non-trivial development, but possible.
    • Windows 3.x (16-bit)
    • Macintosh
    • OS/2

Can Pi3Web run as a Windows NT service?

Yes. There are .bat files for installing, starting, stopping and removing registry entries for Pi3Web in the bin directory of the distribution (typically C:\Pi3Web\bin). There is more information is the README accompanying the distribution.

Does Pi3Web have a Windows GUI?

Yes. Its new with 0.9 beta 4 and works on Windows 95 and Windows NT4.0. You can continue to edit configuration files manually while using the setup and configuration interface.

What are .pi3 files, configuration files or a scripting language?

Pi3 servers are dynamically built at run-time from the directives in .pi3 files. These files specify not only the configuration of individual components (or modules) of the server, but also how they are linked together and nested to form a server with the desired behavour.

This diagram provides one simplified example of how dynamically loaded components are instantiated into a hierarchy of objects which implement a secure HTTP server.

		 | UNIXDaemon |
		 /            \
       	       /                \
         ________         _______________
        |SSLLayer|	 |HTTPLogicObject|
         --------         --------------- 
        /                   /    |    \
TCPIPObject        CGI FCGI WinCGI Document SSI ISAPI

.pi3 files provide the 'roadmap' of how this network of objects is constructed from functions in dynamically loaded modules (DLL's on Windows or shared libraries on UNIX). Although dynamic binding of server components is slower than link-time bind, this provides great flexibility to add or remove or modified core constituents of the server without recompilation. .pi3 files are processed on startup and all dynamic binding completed at that point so the only runtime overhead is a level of indirection of function calls between the dynamic loaded components (i.e. this is not an interpreted language).

What Are The Options For Server-Side Scripting?

There are four options for server-side scripting
  • Server-side includes
  • Pi3Expressions
  • Server-side includes with embedded Pi3Expressions
  • Other scripting technologies
Server-side Includes
Pi3Web supports full featured server-side includes. This is easiest as it is a well documented and known technique. By default any file extension mapped to a the media type 'internal/x-server-parsed-html' will be processed by the SSI handler (SendSSI). The file extension to media type mapping are usually in SERVER_ROOT/Fragment/Mime.typ Use the 'features' configuration of Pi3Web and view http://localhost/pidocs/features/testssi.ssi for an example.
This is a built-in mini expression language for accessing, formatting and modifying internal server values including HTTP headers and markers. A dynamic page can be created from just one such expression by causing the 'SendPi3Expression' handler to be invoked. This can be achieved by setting a marker based on the virtual path mapped or resource extension and using it as a condition later, e.g.
# Mapping
# Invoke PathMapper handler to map paths starting with /foo/ 
# to **internal**/xxx and set the ObjectMap marker to 'expr1'
Mapping PathMap From="/foo/" To="**internal**/" \
# Handling
# Invoke the SendPi3Expression handler if the ObjectMap marker
# is 'expr1'
Handle Condition="&cmp(&dblookup(reponse,string,\
	ObjectMap),expr1))" \
	SendPi3Expression \
	HTTPEquiv="Content-Type: text/html" \
	Pi3Expression="Hello World!"
For an example of such a page view the link http://localhost/Pi3Expression/foo while running the 'features' configuration.
SSI's with embedded Pi3Expressions
You can get the best of both worlds by embedding Pi3Expressions in SSI's. Pi3Web (SendSSI handler) recognizes an additional non-standard SSI directive called 'Pi3ext' to allow pi3Expressions to be embedded in SSI's.

So SSI source file statement:

<!--#Pi3ext expr="(Process, thread) ($P/$k)"-->

Evaluates to:
(Process/thread) (175/128)

The test page http://localhost/pidocs/features/testssi.ssi has an example. (must be running the 'features' configuration'). Hybrid solutions can be powerful when mixed also with embedded CGI, Windows CGI, FastCGI or other resources (including other SSI's).
Support of other scripting technologies
There're a lot of options to extend the Pi3Web server by
other scripting technologies like ASP or PHP4. This is the recommended solution for applications which require true scripting.

On what platforms is Pi3Web multithreaded?

All Pi3Web platforms are multithreaded by default (although this can be disabled via configuration). On platforms that do not support threads, Pi3Web uses a built-in user context threads library to provide threading support.

Does Pi3Web support the Keep-Alive protocol for connection reuse?

Yes. It is enabled by default. But it can be disabled by modifying the 'KeepOpen' setting in the definition of the HTTPLogicObject.

Does Pi3Web Support MS-Frontpage Extensions?

Microsoft does not make vital information available for web server developers to develop frontpage extensions. Where frontpage extensions are available they are supplied by microsoft in binary form only. This means that:

  • There is no good way to support MS-frontpage extensions for pi3.
  • Many ISP's using other web servers (such as Apache) will not install frontpage extensions as thier implementations are not open to public review and are considered a grave security risk by many.

    The pi3 development group will happily invest the time and effort to develop compatibility with other site maintainence products whose vendors entertain a more cooperative philosophy.

    What other scripting technologies are supported by Pi3Web?

    • PHP4
    • ASP
    • ColdFusion
    • Pi3Perl
    • PSP
    • Servlets
    • JSP
    PHP4 scripts may be executed by a built in PHP4 wrapper module. This is much faster than using the CGI variant of PHP4. This option is available for Pi3Web 2.0.
    ASP 1.0 is supported by Pi3Web. ASP 2.0 is very proprietary and is not supported by Pi3Web.
    Allaires ColdFusion 4.5 has been tested successfully with Pi3Web.
    Pi3Perl is a way to extend the server logic by invoking perl based logic handlers as well as to generate dynamic output to clients. This option is available for Pi3Web 2.0.
    PSP provides really "Perl Server Pages", which allow Perl based server side scripting similar to ASP or PHP. This option is available for Pi3Web 2.0.
    Pi3Web 2.0 supports Servlet API 2.1 compliant Servlets.
    Pi3Web 2.0 supports JSP 1.0 compliant Java Server Pages with some restrictions.

    Does Pi3Web support SSL?

    Yes, the built in SSLv2, SSLv3 and TLS1.0 support is based on

    Does Pi3Web support Servlets and JSP's?

    Pi3Web 2.0 supports Servlet API 2.1 compliant Servlets. JSP 1.0 is supported with some restrictions, since this option is still under development.

    Does Pi3Web support ISAPI extensions or filters?

    Yes, both ISAPI extensions and filters are supported. Filters have some restrictions, which are concessions to the different architecture of Pi3Web and IIS.

    Does Pi3Web support HTTP/1.1?

    Most features of HTTP/1.1 are supported by Pi3Web 2.0. However, HTTP/1.1 ranges and content negotiation aren't supported.

    Does Pi3Web support file upload?

    Yes, file uploads based on HTTP/1.1 method PUT and RFC1867 compliant uploads (multipart-form messages) are supported.

    This FAQ list does not answer my questions, ideas?

    Go to the
    support pages, read the documentation, the HowTo's and the users group mail list archives, send an e-mail to the users group mail list or send an e-mail to the development group - preferably in that order.

    [ Page Top | Home | Mail ]
    All trademarks and copyrights are property of their respective owners.
    Copyright © 1998-2004
    Holger Zimmermann, John Roy.