$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();
public function multi_thread_serverAction() { function worker_routine() { $context = new ZMQContext(); $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); sleep(1); $receiver->send("World"); } } for ($thread_nbr = 0; $thread_nbr != 5; $thread_nbr++) { $pid = pcntl_fork(); if ($pid == 0) { worker_routine(); exit; } } $context = new ZMQContext(); $clients = new ZMQSocket($context, ZMQ::SOCKET_ROUTER); $clients->bind("tcp://127.0.0.1:5555"); $workers = new ZMQSocket($context, ZMQ::SOCKET_DEALER); $workers->bind("ipc://workers.ipc"); $device = new ZMQDevice($clients, $workers); $device->run(); }