国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

在子進(jìn)程的回調(diào)里使用empty 或者isset 導(dǎo)致進(jìn)程卡死

codeninjia
$worker->onMessage = function ($connection, $data) {
    try {
        $ret = call_user_func_array(array(SERVICE_DIR."\\".$class, $method), $param_array);
 /*這里我只要判斷比如 isset($ret);進(jìn)程機(jī)會(huì)卡死。走不到 下面如果我不判斷直接返回的就可以。
我本地可以,本地的版本是php7.0 服務(wù)器上不行。版本是php7.15。其實(shí)這個(gè)時(shí)候返回的數(shù)據(jù)$ret 是個(gè)空數(shù)組
,*/

    StatisticClient::report($class, $method, 1, 0, '', $statistic_address);
   return $connection->send($ret);
   }
    catch (Exception $e) {
        // 發(fā)送數(shù)據(jù)給客戶端,發(fā)生異常,調(diào)用失敗
    $code = $e->getCode() ? $e->getCode() : 500;
        StatisticClient::report($class, $method, $success, $code, $e, $statistic_address);
        return $connection->send(array('code' => $code, 'msg' => $e->getMessage(), 'data' => $e));
    }
}

strce 打出來的信息里。比較有用的是

poll(, 1, 0) = 0 (Timeout)
sendto(23, "*3\r\n$3\r\nSET\r\n$61\r\nhooker_config_"..., 89, MSG_DONTWAIT, NULL, 0) = 89
poll(, 1, 0) = 0 (Timeout)
poll(, 1, 3000) = 1 ()
recvfrom(23, "+OK\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 5
poll(, 1, 0) = 0 (Timeout)
sendto(23, "*4\r\n$4\r\nHSET\r\n$56\r\nhooker_config"..., 121, MSG_DONTWAIT, NULL, 0) = 121
poll(, 1, 0) = 0 (Timeout)
poll(, 1, 3000) = 1 ()
recvfrom(23, ":0\r\n", 8192, MSG_DONTWAIT, NULL, NULL) = 4
3963 2 0
2個(gè)回答

six

把$ret打印出來看看是什么,估計(jì)$ret不是數(shù)組,是不是isset($ret)報(bào)錯(cuò)拋異常了?
存猜測(cè)。

另外如果$ret是數(shù)組的話,$connection->send($ret); 應(yīng)該不行把,我記得send的數(shù)據(jù)好像必須是字符串的

  • codeninjia 2017-10-18

    打出來看了確實(shí)是個(gè)數(shù)組,至于send的話。我是用的json協(xié)議會(huì)自動(dòng)轉(zhuǎn)。如果我用empty判斷,然后給個(gè)空數(shù)組,就不會(huì)報(bào)錯(cuò)了。

walkor 打賞

看strace信息是你的業(yè)務(wù)一直在操作redis,估計(jì)是業(yè)務(wù)進(jìn)入了某個(gè)死循環(huán)或者大的循環(huán)導(dǎo)致業(yè)務(wù)卡住了。
還有看起來你的redis好像返回有點(diǎn)慢,看下redis負(fù)載,或者可能是其它原因?qū)е聄edis返回很慢。
redis操作關(guān)鍵字大概是
redis->set('hooker_config_...', ...);
redis->hset('hooker_config...', ...);

  • codeninjia 2017-10-23

    謝謝回答,我在輸出$ret 的時(shí)候看返回的是空數(shù)組呢,你的意思是在查詢r(jià)edis的時(shí)候redis其實(shí)并沒有響應(yīng),所以會(huì)導(dǎo)致進(jìn)程卡死對(duì)嗎?在多問一個(gè)問題,就是我在進(jìn)行壓測(cè)的時(shí)候偶爾會(huì)出現(xiàn),
    RedisException' with message 'read error on connection 這個(gè)錯(cuò)誤。
    workerman和php的版本如下。謝謝
    ----------------------- WORKERMAN -----------------------------
    Workerman version:3.5.1 PHP version:5.5.33

  • walkor 2017-10-24

    read error on connection 是redis問題,和workerman無關(guān)

  • walkor 2017-10-24

    redis無響應(yīng)會(huì)卡死

  • codeninjia 2017-10-25

    @1:意思是 read error on connection 這樣錯(cuò)誤是redis自己的問題。不是代碼的事情可以這樣理解嗎

  • codeninjia 2017-10-25

    @1:還有就是如果跑在php7.1的環(huán)境下是不會(huì)報(bào)錯(cuò)的。現(xiàn)在5.5的環(huán)境下會(huì)報(bào)那個(gè)錯(cuò)誤。

  • walkor 2017-10-26

    read error on connection應(yīng)該不是業(yè)務(wù)代碼的問題。php7.1的環(huán)境下是不會(huì)報(bào)錯(cuò)有可能是redis擴(kuò)展在這個(gè)版本修復(fù)了這個(gè)問題。以上只是猜測(cè)。

  • codeninjia 2017-11-01

    @1:恩我已經(jīng)升級(jí)了現(xiàn)在沒問題了。謝謝回答。

年代過于久遠(yuǎn),無法發(fā)表回答
??