Can this be done by having MC running in the background *prior* to the
cgi being called by the server - not sure how the os associated the
script with the engine.... or whether it creates another process....
would like to though:)
Unfortunately, no- the server will spawn a new cgi process for each request.
I have found a couple options, however:
1). Run a simple server which takes request from cgi scripts (over sockets), and supplies the persistent data.
2) Run a pool of servers, all listening on their own port, and then still utilize 1).
I did cook up something fun to play with. I stuck this in a script "httpd" and call "./httpd 8080 10" from the terminal. What I get: 10 processes listening on ports 8080-8089.
This is somewhat like apache's behavior: a bunch of child processes handle requests. Problem is, Apache uses fork() and select(), so it manages to get all of the processes listening on the *same* port. I can't see how that is possible with Metacard.
#!mc
global thisPort, myID, isLastChild
on startup
put $1 into thisPort
put $2 into numChildren
put $3 into myID
put $4 into isLastChild
if (myID is empty) then put 0 into myID
accept connections on port thisPort with message "newConnect"
repeat with pID=1 to numChildren-1
open process ($0&&($1+pID)&&"0"&&(pID)&&(pID = (numChildren - 1)))
end repeat
end startup
on newConnect s
read from socket s until empty
put "HTTP/1.0 200 OK WebCF"&crLF into r
put "Content-Type: text/plain"&crLF after r
put "Content-Length: "&length(myID)&crLF&crLF after r
put myID after r
write r to socket s
end newConnect