From: "Ara.T.Howard" Date: 2005-09-08T05:25:28+09:00 Subject: [ANN] acgi-0.0.0 --8323328-905497070-1126124725=:15399 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-905497070-1126124725=:15399" This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-905497070-1126124725=:15399 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE URIS http://codeforpeople.com/lib/ruby/acgi/ SYNOPSIS as=C2=B7sid=C2=B7u=C2=B7ous (adj.) 1. constant in application or attention; diligent: an assiduous worker= who strove for perfection. 2. unceasing; persistent: assiduous research. acgi : assiduous or ara's cgi (emphasis on the 'ass' in assiduous) a dro= p-in replacement for ruby's built-in cgi that provides copious features such = as - persistence - speed - simplicity - familiarity - no apache modules - browser neutrality - could easily be made platform independent - ability to install via ftp - no special webserver setup or privledges required - session affinity (no process pool) so mem caching is simple - 91 lines of ruby code ARCHITECHTURE the design of acgi is similar to that of fastcgi (http://www.fastcgi.com= ) but requires no external modules, configuration of apache, etc. a acgi application consists of a cgi server backend which loops, handlin= g all incoming requests; the requests are delegated to this backend server via= a simple, fast to start up, 'index.cgi' program written in c. communicati= on between 'index.cgi' and it's backend server is via named pipes (fifos): ------------- | index.cgi | <- transient (compiled c co= de) ------------- |=09| | | fifos for stderr, stdout, stdin, env |=09| | /=09| \ ------------------------------ | | | cgi server | <- persistent (looping ruby= code) | | ------------------------------ note that the architechture is similar in spirit to fastcgi - it provide= s speed by avoiding startup overhead and redundant work like database conn= ection setup. in this case, contrasted with fastcgi, the whole thing takes pla= ce outside of the webserver in the application domain. REQUEST CYCLE - request comes in to web server - request is passed to index.cgi, a very simple compiled c program which= in turn does the following - make sure the ruby server is running, spawn it in the background i= ff required. this is a non-blocking operation that functions as a si= mple process manager to ensure a server is running at all times. - aqurire a lock to prevent other invocations of index.cgi from overlapping - all invocations procede one at a time in the order o= f receipt. there are never concurrent requests to the server. - serialize the environment and send it down a fifo - read any stderr/stdout from the ruby server via fifos and write th= em to stderr/stdout respectively - release lock - the ruby server, for it's part, does the following - aquire a lock which prevent multiple copies from running simoultaneo= usly. this is the same lock the c program checks. - loops - loading the environment - handling request with stderr/stdout/stdin redirected the cycle is mostly transparent to the cgi progam. to convert an existi= ng cgi program to an acgi program one would simply change require 'cgi cgi =3D CGI::new establish_database_connection generate_content to require 'acgi establish_database_connection ACGI::each_cgi do |cgi| generate_content end IMPLEMENTATION shoddy. this version is proof of concept only!!! it's likely to run only on lin= ux, though it may run on many *nix platforms. or maybe not. there is littl= e to no error checking, the sun could explode if you run the example program. security is not considered. RUNNING THE EXAMPLE - unpack tarball in webroot - make - point browser at http:://your.host.com/path/where/you/unpacked/index= =2Ecgi obviously you'll need cgi setup for you web server, ruby installed, etc. - try changing server.rb and running 'make restart' BUGS > 42 WHY? i think the idea is neat enough to pursue. i'd like to get a minimal pa= ckage going that supported windows and *nix. if you are interested in partici= pating please contact me. mostly i'm in need of windows c/ipc knowledge. EMAIL ara [dot] t [dot] howard [at] noaa [dot] gov -a --=20 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | Your life dwells amoung the causes of death | Like a lamp standing in a strong breeze. --Nagarjuna =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D --8323328-905497070-1126124725=:15399-- --8323328-905497070-1126124725=:15399--