예제 #1
0
파일: zmq.php 프로젝트: liangkwok/Swoole
$context = new ZMQContext();
$sender = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$sender->bind("tcp://*:5557");
$receiver = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$receiver->bind("tcp://*:5558");
function onZMQR()
{
    global $receiver;
    $string = $receiver->recv();
    echo $string, PHP_EOL;
}
$serv->set(array('worker_num' => 1, 'reactor_num' => 1));
$serv->on('workerStart', function ($serv, $worker_id) {
    global $sender;
    global $receiver;
    $rfd = $receiver->getsockopt(ZMQ::SOCKOPT_FD);
    swoole_event_add($rfd, 'onZMQR', NULL, SWOOLE_EVENT_READ);
    echo "worker start\n";
});
$serv->on('connect', function ($serv, $fd, $from_id) {
    echo "[#" . posix_getpid() . "]\tClient@[{$fd}:{$from_id}]: Connect.\n";
});
$serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {
    $cmd = trim($data);
    echo "[#" . posix_getpid() . "]\tClient[{$fd}]: {$data}\n";
    if ($cmd == "zmqtest") {
        echo 'aaaaaaaaaaaa' . PHP_EOL;
        $sender->send("msg to zmq");
    }
    $serv->send($fd, 'OK' . PHP_EOL);
    //$serv->close($fd);