File: Netcgi_plex.html

package info (click to toggle)
ocamlnet 2.2.9-8
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 17,724 kB
  • ctags: 10,053
  • sloc: ml: 63,928; ansic: 1,973; makefile: 800; sh: 651
file content (229 lines) | stat: -rw-r--r-- 16,185 bytes parent folder | download | duplicates (2)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<link rel="Start" href="index.html">
<link rel="previous" href="Netcgi_porting.html">
<link rel="next" href="Http_client.html">
<link rel="Up" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of class attributes" rel=Appendix href="index_attributes.html">
<link title="Index of class methods" rel=Appendix href="index_methods.html">
<link title="Index of classes" rel=Appendix href="index_classes.html">
<link title="Index of class types" rel=Appendix href="index_class_types.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html">
<link title="Equeue" rel="Chapter" href="Equeue.html">
<link title="Unixqueue" rel="Chapter" href="Unixqueue.html">
<link title="Uq_engines" rel="Chapter" href="Uq_engines.html">
<link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html">
<link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html">
<link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html">
<link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html">
<link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html">
<link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html">
<link title="Netcgi" rel="Chapter" href="Netcgi.html">
<link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html">
<link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html">
<link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html">
<link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html">
<link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html">
<link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html">
<link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html">
<link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html">
<link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html">
<link title="Http_client" rel="Chapter" href="Http_client.html">
<link title="Telnet_client" rel="Chapter" href="Telnet_client.html">
<link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html">
<link title="Ftp_client" rel="Chapter" href="Ftp_client.html">
<link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html">
<link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html">
<link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html">
<link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html">
<link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html">
<link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html">
<link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html">
<link title="Netplex_types" rel="Chapter" href="Netplex_types.html">
<link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html">
<link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html">
<link title="Netplex_log" rel="Chapter" href="Netplex_log.html">
<link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html">
<link title="Netplex_container" rel="Chapter" href="Netplex_container.html">
<link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html">
<link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html">
<link title="Netplex_main" rel="Chapter" href="Netplex_main.html">
<link title="Netplex_config" rel="Chapter" href="Netplex_config.html">
<link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html">
<link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html">
<link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html">
<link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html">
<link title="Netshm" rel="Chapter" href="Netshm.html">
<link title="Netshm_data" rel="Chapter" href="Netshm_data.html">
<link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html">
<link title="Netshm_array" rel="Chapter" href="Netshm_array.html">
<link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html">
<link title="Netconversion" rel="Chapter" href="Netconversion.html">
<link title="Netchannels" rel="Chapter" href="Netchannels.html">
<link title="Netstream" rel="Chapter" href="Netstream.html">
<link title="Mimestring" rel="Chapter" href="Mimestring.html">
<link title="Netmime" rel="Chapter" href="Netmime.html">
<link title="Netsendmail" rel="Chapter" href="Netsendmail.html">
<link title="Neturl" rel="Chapter" href="Neturl.html">
<link title="Netaddress" rel="Chapter" href="Netaddress.html">
<link title="Netbuffer" rel="Chapter" href="Netbuffer.html">
<link title="Netdate" rel="Chapter" href="Netdate.html">
<link title="Netencoding" rel="Chapter" href="Netencoding.html">
<link title="Netulex" rel="Chapter" href="Netulex.html">
<link title="Netaccel" rel="Chapter" href="Netaccel.html">
<link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html">
<link title="Nethtml" rel="Chapter" href="Nethtml.html">
<link title="Netstring_str" rel="Chapter" href="Netstring_str.html">
<link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html">
<link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html">
<link title="Netmappings" rel="Chapter" href="Netmappings.html">
<link title="Netaux" rel="Chapter" href="Netaux.html">
<link title="Nethttp" rel="Chapter" href="Nethttp.html">
<link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html">
<link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html">
<link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html">
<link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html">
<link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html">
<link title="Netsys" rel="Chapter" href="Netsys.html">
<link title="Netpop" rel="Chapter" href="Netpop.html">
<link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html">
<link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html">
<link title="Rpc_time" rel="Chapter" href="Rpc_time.html">
<link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html">
<link title="Rtypes" rel="Chapter" href="Rtypes.html">
<link title="Xdr" rel="Chapter" href="Xdr.html">
<link title="Rpc" rel="Chapter" href="Rpc.html">
<link title="Rpc_program" rel="Chapter" href="Rpc_program.html">
<link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html">
<link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html">
<link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html">
<link title="Rpc_client" rel="Chapter" href="Rpc_client.html">
<link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html">
<link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html">
<link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html">
<link title="Rpc_server" rel="Chapter" href="Rpc_server.html">
<link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html">
<link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html">
<link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html">
<link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html">
<link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html">
<link title="Shell_sys" rel="Chapter" href="Shell_sys.html">
<link title="Shell" rel="Chapter" href="Shell.html">
<link title="Shell_uq" rel="Chapter" href="Shell_uq.html">
<link title="Shell_mt" rel="Chapter" href="Shell_mt.html">
<link title="Shell_intro" rel="Chapter" href="Shell_intro.html">
<link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><link title="Factory" rel="Section" href="#2_Factory">
<link title="Processors" rel="Section" href="#2_Processors">
<title>Ocamlnet 2 Reference Manual : Netcgi_plex</title>
</head>
<body>
<div class="navbar"><a href="Netcgi_porting.html">Previous</a>
&nbsp;<a href="index.html">Up</a>
&nbsp;<a href="Http_client.html">Next</a>
</div>
<center><h1>Module <a href="type_Netcgi_plex.html">Netcgi_plex</a></h1></center>
<br>
<pre><span class="keyword">module</span> Netcgi_plex: <code class="code">sig</code> <a href="Netcgi_plex.html">..</a> <code class="code">end</code></pre><a name="1_NetplexsupportforFastCGISCGIandAJPconnectors"></a>
<h1>Netplex support for FastCGI, SCGI and AJP connectors</h1><br>
<hr width="100%">
<br>
<a name="2_Factory"></a>
<h2>Factory</h2><br>
<pre><span class="keyword">val</span> <a name="VALfactory"></a>factory : <code class="type">?config:<a href="Netcgi.html#TYPEconfig">Netcgi.config</a> -><br>       ?enable:[ `AJP | `FCGI | `SCGI ] list -><br>       ?name:string -><br>       ?output_type:<a href="Netcgi.html#TYPEoutput_type">Netcgi.output_type</a> -><br>       ?arg_store:<a href="Netcgi.html#TYPEarg_store">Netcgi.arg_store</a> -><br>       ?exn_handler:<a href="Netcgi.html#TYPEexn_handler">Netcgi.exn_handler</a> -><br>       (<a href="Netplex_types.container.html">Netplex_types.container</a> -> <a href="Netcgi.cgi.html">Netcgi.cgi</a> -> unit) -><br>       <a href="Netplex_types.processor_factory.html">Netplex_types.processor_factory</a></code></pre><div class="info">
Reads a Netplex configuration section like
 <pre><code class="code">    processor {
      type = "netcgi";          (* or the overridden [name] *)
      timeout = 15;             (* optional *)
      mount_dir = "/url/path";  (* optional *)
      mount_at = "/url/path";   (* optional alternative to mount_dir *)
    }
 </code></pre>
<p>

 and creates a processor for the protocols "fcgi", "scgi",
 and "ajp" (or a subset of these protocols if the <code class="code">enable</code> 
 parameter restricts them). A complete service definition
 looks thus like:
<p>

 <pre><code class="code">      service {
          name = "name_of_service";
          protocol {
              name = "fcgi";        (* or "scgi" or "ajp" *)
              address {
                  type = "internet";
                  bind = "localhost:&lt;port&gt;";
              };
          };
          (* ... several protocol sections allowed! *)
          processor {
              type = "netcgi";
          };
          workload_manager {
              type = "dynamic";
              max_jobs_per_thread = 1;  (* only reasonable value *)
              min_free_job_capacity = &lt;n&gt;;
              max_free_job_capacity = &lt;n&gt;;
              max_threads = &lt;n&gt;;
          };
      }
 </code></pre>
<p>

 The processor calls the argument function of type <code class="code">container -&gt; cgi -&gt; unit</code>
 for every incoming request.
<p>

 The <code class="code">timeout</code> parameter specifies when inactive connections are
 timed out (in seconds). The <code class="code">mount_dir</code> and <code class="code">mount_at</code> parameters
 define which part of the URL is considered as <code class="code">SCRIPT_NAME</code>:
<p>
<ul>
<li>By default (if neither <code class="code">mount_dir</code> nor <code class="code">mount_at</code>) are given
   <code class="code">SCRIPT_NAME</code> is determined in a protocol-dependent way. Usually,
   the server transmits <code class="code">SCRIPT_NAME</code>, but see the note below.</li>
<li>If <code class="code">mount_dir</code> is present, the processor accepts only URLs
   that have this path as true prefix directory, i.e. the URL path
   is <code class="code">&lt;mount_dir&gt;/&lt;name&gt;&lt;rest&gt;</code>. The part <code class="code">&lt;mount_dir&gt;/&lt;name&gt;</code>
   is taken as <code class="code">SCRIPT_NAME</code>.</li>
<li>If <code class="code">mount_at</code> is present, the processor accepts only URLs
   that have this path as prefix, i.e. the URL path is
   <code class="code">&lt;mount_at&gt;&lt;rest&gt;</code>. <code class="code">&lt;mount_at&gt;</code> is taken as <code class="code">SCRIPT_NAME</code>.</li>
</ul>

 The background is that <code class="code">SCRIPT_NAME</code> is commonly used to
 distinghuish between different web actions of the netcgi
 application. The actions are simply names in a directory like
 <code class="code">/bin/&lt;name&gt;</code> or <code class="code">/servlet/&lt;name&gt;</code>. Not all web servers/protocols
 transmit good values for <code class="code">SCRIPT_NAME</code>, however. By specifying
 <code class="code">mount_dir</code> or <code class="code">mount_at</code> one can force to interpret a certain
 prefix of the request URL as <code class="code">SCRIPT_NAME</code>.
<p>

<br>
</div>
<div class="param_info"><code class="code">config</code> : The Netcgi configuration to use, default is
    <a href="Netcgi.html#VALdefault_config"><code class="code">Netcgi.default_config</code></a></div>
<div class="param_info"><code class="code">enable</code> : Which protocols to support. Default is to
    support all protocols</div>
<div class="param_info"><code class="code">name</code> : Defines the name of the processor. Default is "netcgi".</div>
<div class="param_info"><code class="code">output_type</code> : Default: <code class="code">`Direct ""</code></div>
<div class="param_info"><code class="code">arg_store</code> : Default: <code class="code">`Automatic</code> for all arguments.</div>
<div class="param_info"><code class="code">exn_handler</code> : See <a href="Netcgi.html#TYPEexn_handler"><code class="code">Netcgi.exn_handler</code></a>.  Default: delegate
      all exceptions to the default handler.</div>
<br>
<a name="2_Processors"></a>
<h2>Processors</h2><br>
<br>
The following functions create the processors directly<br>
<pre><span class="keyword">type</span> <a name="TYPEmountpoint"></a><code class="type"></code>mountpoint = <code class="type">[ `Mount_at of string | `Mount_dir of string ]</code> </pre>

<pre><span class="keyword">val</span> <a name="VALfcgi_processor"></a>fcgi_processor : <code class="type">?config:<a href="Netcgi.html#TYPEconfig">Netcgi.config</a> -><br>       ?output_type:<a href="Netcgi.html#TYPEoutput_type">Netcgi.output_type</a> -><br>       ?arg_store:<a href="Netcgi.html#TYPEarg_store">Netcgi.arg_store</a> -><br>       ?exn_handler:<a href="Netcgi.html#TYPEexn_handler">Netcgi.exn_handler</a> -><br>       ?timeout:float -><br>       ?mount:<a href="Netcgi_plex.html#TYPEmountpoint">mountpoint</a> -><br>       (<a href="Netplex_types.container.html">Netplex_types.container</a> -> <a href="Netcgi_fcgi.cgi.html">Netcgi_fcgi.cgi</a> -> unit) -><br>       <a href="Netplex_types.processor.html">Netplex_types.processor</a></code></pre><pre><span class="keyword">val</span> <a name="VALscgi_processor"></a>scgi_processor : <code class="type">?config:<a href="Netcgi.html#TYPEconfig">Netcgi.config</a> -><br>       ?output_type:<a href="Netcgi.html#TYPEoutput_type">Netcgi.output_type</a> -><br>       ?arg_store:<a href="Netcgi.html#TYPEarg_store">Netcgi.arg_store</a> -><br>       ?exn_handler:<a href="Netcgi.html#TYPEexn_handler">Netcgi.exn_handler</a> -><br>       ?timeout:float -><br>       ?mount:<a href="Netcgi_plex.html#TYPEmountpoint">mountpoint</a> -><br>       (<a href="Netplex_types.container.html">Netplex_types.container</a> -> <a href="Netcgi.cgi.html">Netcgi.cgi</a> -> unit) -> <a href="Netplex_types.processor.html">Netplex_types.processor</a></code></pre><pre><span class="keyword">val</span> <a name="VALajp_processor"></a>ajp_processor : <code class="type">?config:<a href="Netcgi.html#TYPEconfig">Netcgi.config</a> -><br>       ?output_type:<a href="Netcgi.html#TYPEoutput_type">Netcgi.output_type</a> -><br>       ?arg_store:<a href="Netcgi.html#TYPEarg_store">Netcgi.arg_store</a> -><br>       ?exn_handler:<a href="Netcgi.html#TYPEexn_handler">Netcgi.exn_handler</a> -><br>       ?timeout:float -><br>       ?mount:<a href="Netcgi_plex.html#TYPEmountpoint">mountpoint</a> -><br>       (<a href="Netplex_types.container.html">Netplex_types.container</a> -> <a href="Netcgi.cgi.html">Netcgi.cgi</a> -> unit) -> <a href="Netplex_types.processor.html">Netplex_types.processor</a></code></pre></body></html>