Multithreaded service in PHP

<?php
/*
* Multithreaded Hello World server. Uses proceses due
* to PHP's lack of threads!
* @author Ian Barber <ian(dot)barber(at)gmail(dot)com>
*/

function worker_routine()
{
$context = new ZMQContext();
// Socket to talk to dispatcher
$receiver = new ZMQSocket($context, ZMQ::SOCKET_REP);
$receiver->connect("ipc://workers.ipc");

while (true) {
$string = $receiver->recv();
printf ("Received request: [%s]%s", $string, PHP_EOL);

// Do some 'work'
sleep(1);

// Send reply back to client
$receiver->send("World");
}
}

// Launch pool of worker threads
for ($thread_nbr = 0; $thread_nbr != 5; $thread_nbr++) {
$pid = pcntl_fork();
if ($pid == 0) {
worker_routine();
exit();
}
}

// Prepare our context and sockets
$context = new ZMQContext();

// Socket to talk to clients
$clients = new ZMQSocket($context, ZMQ::SOCKET_ROUTER);
$clients->bind("tcp://*:5555");

// Socket to talk to workers
$workers = new ZMQSocket($context, ZMQ::SOCKET_DEALER);
$workers->bind("ipc://workers.ipc");

// Connect work threads to client threads via a queue
$device = new ZMQDevice($clients, $workers);
$device->run ();