david rasch — technology. business. life.

david rasch — technology. business. life.

david rasch — technology. business. life. RSS Feed
 
 
 
 

PHP on the Backend

PHP (or any language for that matter) can just as easily be used as a daemon as on the web. This can be especially useful when solving problems that can’t “complete” in less than 500 ms which one shoots for on the web. As you write an application to handle things such as those mentioned below, be sensitive to the processing, disk space, and time needed to process these requests in planning how to handle these. As an example jobs of a small size might be handled inline by the code that handles the form submission, but for larger jobs it queues them for background processing.

great for background/async processing of:

  • photos
  • movies
  • reports
  • imports of data

advantages:

  • use the same codebase as your app
  • use the same expertise on your team of programmers

challenges:

  • signals
  • one thread
  • memory (this will have to be a whole separate article)
  • starting and stopping

A typical Daemon class I use:

abstract class Daemon {
    protected $done = false;

    public function __construct($argv) {
    }
    public function init() {
        pnctl_signal(SIGTERM, array($this, "onSignal"));
        pnctl_signal(SIGINT, array($this, "onSignal"));

    }
    abstract public function run();
    public function shutdown() {}
    public function isDone() {
        return $this->done;
    }
    public onSignal($signal){
        switch ($signal) {
             case SIGTERM:
             case SIGINT:
                $this->done = true;
                 break;
             default:
                 // handle all other signals
        }
    }
}

As you can see, we’ve started to tackle some of the challenges here. The idea is to handle signals, specifically I usually care about SIGTERM (default when using ‘kill’ on *nix) and SIGINT (from pressing Ctrl-C). Both will cause the program to exit gracefully.

I’ll be posting the class I use to run Daemon’s tomorrow.

Related posts

2 Responses to “PHP on the Backend”

  1. 1
    david | rasch — Management, Software, and Technology » PHP on the Backend (part 2):

    [...] run the class I posted yesterday, I typically use a class called DaemonRunner. This class sets up for proper signal handling, and [...]

  2. 2
    Jean-Marc Fontaine:

    I wrote a daemon for that purpose but I can not find how I could spawn childs to do the actual work.

    Do you have clues ?

Leave a Reply

Flickr

www.flickr.com
raschnet's items Go to raschnet's photostream

Twitter

    Tags

    Older Stuff