UnrealEngine
V2EX  ›  PHP

萌新第一次接触 gearman 服务无法使用问题,请问要如何调试才好?

  •  
  •   UnrealEngine · Jun 18, 2020 · 2105 views
    This topic created in 2180 days ago, the information mentioned may be changed or developed.

    线上有块功能是用 gearman 任务分发来完成的,但是之前负责这块的员工已经离职了,运维也不清楚这一块,所以第一次接手是一头雾水。

    核心代码如下(原代码比较冗长,我这里就缩写了):

    $worker = new GearmanClient();

    $worker->addServer('10.0.0.5', 4730);

    $worker->setCompleteCallback("complete");

    $worker->addTask('doSomething', 'yes', null, $id);

    $worker->runTasks();

    $result = $worker->getResult();

    这块功能之前正常,但是换了服务器后这块功能就失灵了。

    怎么调试确实不懂,运维也问我怎么测试比较好。

    8 replies    2020-07-01 22:44:00 +08:00
    UnrealEngine
        1
    UnrealEngine  
    OP
       Jun 18, 2020
    执行 php --info | grep "gearman support"后显示正确安装
    couashi
        2
    couashi  
       Jun 19, 2020
    需要安装 gearmand, 安装 gearman 的 php 扩展, 启动 gearmand 服务
    UnrealEngine
        3
    UnrealEngine  
    OP
       Jun 19, 2020
    @couashi gearmand 和 php 的扩展都安装好了的
    GuangXiN
        4
    GuangXiN  
       Jun 19, 2020 via Android
    换了服务器之后 server ip 变了?
    UnrealEngine
        5
    UnrealEngine  
    OP
       Jun 19, 2020
    @couashi
    @GuangXiN 试着调试了下,addtask 没问题,返回了 true,但是 runtasks 的时候返回了 false,但是依然不知道怎么解决
    couashi
        6
    couashi  
       Jun 19, 2020
    @UnrealEngine

    client.php
    couashi
        7
    couashi  
       Jun 19, 2020
    1 <?php
    2 $worker = new GearmanClient();
    3
    4 $worker->addServer();
    5
    6 $worker->setCompleteCallback("complete");
    7
    8 $worker->setCreatedCallback('created');
    9
    10 $worker->addTask('doSomething', 'yes', null);
    11
    12 var_dump($worker->runTasks());
    13
    14 function created($task)
    15 {
    16 print "已创建任务:" . $task->jobHandle(). PHP_EOL;
    17 }
    18
    19 function complete($task)
    20 {
    21 print "完成:" . $task->data() . PHP_EOL;
    22 }


    server.php

    1 <?php
    2 $worker = new GearmanWorker();
    3
    4 $worker->addServer();
    5
    6 $worker->addFunction('doSomething', 'doSomethingFn');
    7
    8 print "等待处理...." . PHP_EOL;
    9
    10 while ($worker->work()) {
    11
    12 }
    13
    14 function doSomethingFn($job)
    15 {
    16 print "已收到,正在处理..". $job->handle() . PHP_EOL;
    17 $workload = $job->workload();
    18 $workload_size = $job->workloadSize();
    19
    20 print "Workload: $workload ($workload_size)" . PHP_EOL;
    21
    22 $result = "doSomething | " . $workload;
    23 print "处理完成,返回结果: " . $result;
    24 return $result;
    25 }
    UnrealEngine
        8
    UnrealEngine  
    OP
       Jul 1, 2020
    @couashi 我有两套代码,都是在同一套服务器不同文件夹下,但是他们 gearman 的 ip 是相同的,然后代码 1 doBackground 时添加的函数会等同于代码 2 里的函数吗?(代码 1 没有这个函数但是代码 2 有)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 19:28 · PVG 03:28 · LAX 12:28 · JFK 15:28
    ♥ Do have faith in what you're doing.