php разветвление и использование memcache - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь узнать о php, разветвлении, совместном использовании ресурсов и т. Д., Пытаясь понять их концепцию, у меня возникла бессмысленная проблема, я исправил (с удачей), но не понял ...

это может быть ошибка ..

<?php
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    $m->set('name', 'anil');

    $workerCount = 3;
    for($c=0; $c<$workerCount; $c++){
        $pid = pcntl_fork();
        if($pid === 0){
            /* Children */
            $m->get('name');
            $name = $m->get('name');

            echo 'This is child number : ' . getmypid() . PHP_EOL;
            echo 'And this is name value in memcache : ' . $name . ' : ' . $m->getResultCode() . PHP_EOL . PHP_EOL;
            exit;
        }else{
            /* Parent */
            pcntl_wait($status);
        }
    }

, как вы заметили, я вызываю $ m-> get дважды .. если нет, это не работает.

два результата вызова:

Это дочерний номер: 9684 И это микротайм в memcache: anil: 0

Это дочерний номер: 9685 И этоmicrotime в memcache: anil: 0

Это дочерний номер: 9686 И это microtime в memcache: anil: 0

один результат вызова:

Это дочерний номер: 9721 А это микротайм в memcache: anil: 0

Это дочерний номер: 9722 А это микротайм в memcache:: 19

Это дочерний номер: 9723 И это микротайм в memcache:: 19

ps: $ m-> getResultCode () -> 19 is: Memcached :: RES_SOME_ER* 1032 R или S *

1 Ответ

2 голосов
/ 22 июня 2011

вам нужно создать ваши подключения к memcached после форка.в противном случае вы используете одно и то же сокетное соединение между несколькими процессами на стороне php, и memcache не знает, что вы делаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...