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

Reply via email to