outcast has asked for the wisdom of the Perl Monks concerning the following question:

Monks, It has been along time, but I come before you now with a puzzling question. I am trying to figure the best way to do bidirectional IPC. What I am trying to achive is to have a daemon running and listening to a socket, file handler or what ever, for requests from a cgi script.

I have read most of the PerlIPC doc. I come before you to ask has anyone had experence with this type of IPC and how you recommend I go about it. Also if you might be able to point me in the direction of an example would be great.

I humbly bow and await your answer. Thank you in advance.

-----------------
This only a virtual reality

Replies are listed 'Best First'.
Re: IPC Confusion
by derby (Abbot) on Sep 09, 2006 at 10:36 UTC

    Unless you're set on going solo, I would recommend Net::Server.

    -derby
      i just found this. IPC::ShareLite it look like it might be workable.

      This only a virtual reality
Re: IPC Confusion
by bennymack (Pilgrim) on Sep 10, 2006 at 04:04 UTC

    Of course, as with all things Perl, there is more than one way to do it.

    I guess I'd like to answer your question with a question in typical XY fasion. What are you ultimately trying to accomplish?

    If you're looking for a simple way to daemonize a perl script and give it a persistent interpreter to run in then Net::Server is a good solution. Also take a look at HTTP::Daemon, HTTP::Request, and HTTP::Response. Simple servers can easily be plugged together with these modules. Another good module is Net::Server::PreForkSimple.

    Now that I re-read your question I may be completely off base. Is your situation a CGI script that you want to have communicate with your daemon for the purpose of grabbing some data? If so, then there are a few solutions. The best solution depends on the actual problem of course.

    If the deamon needs to be a singleton and runs on the same box then IO::Socket::UNIX is probably a good way to go. If it doesn't need to be a singleton, e.g. you can spawn a daemon per server process, then perhaps IPC::Open3 since it's pretty fast for this type of thing.

    If you're completely confused, sorry. Need a little bit more info.