2011-01-06 124 views
0

我試圖讓PHP使用$ gmclient-> do(「somefunction」,「somedata」)向php發出請求後,函數將函數的值返回給php。但是,php客戶端只是超時。我使用的確切代碼是直接從PHP手冊。我使用的例子#1從http://docs.php.net/manual/en/gearmanclient.do.phpGearman返回值不起作用

瀏覽器給了我這個消息:

此網頁無法使用。

該網頁在 http://yoursite.com/client.php 可能暫時,或者它 已永久性地移動到一個新的Web 地址。

有關此錯誤的更多信息。 以下是原始錯誤信息

錯誤324(net :: ERR_EMPTY_RESPONSE): 未知錯誤。

瀏覽器是Chrome瀏覽器,如果這有助於詳細說明錯誤消息。

如果有所作爲,worker.php文件正在終端窗口中使用命令「php worker.php」執行。我在Ubuntu 9.10 Karmic Koala上運行。我安裝了使用http://blog.stuartherbert.com/php/2010/02/26/getting-gearman-up-and-running-on-ubuntu-karmic/

找到的指示安裝了gearman我檢查了終端窗口,並且gearman正在收到請求並將結果回顯到終端 - 它只是沒有發送回客戶端。

最終目標是讓齒輪人員從執行的函數返回客戶端的返回值並將該值顯示給用戶。

UPDATE:

按照要求,代碼如下:

worker.php(工人)

<?php 

echo "Starting\n"; 

# Create our worker object. 
$gmworker= new GearmanWorker(); 

# Add default server (localhost). 
$gmworker->addServer(); 

# Register function "reverse" with the server. Change the worker function to 
# "reverse_fn_fast" for a faster worker with no output. 
$gmworker->addFunction("reverse", "reverse_fn"); 

print "Waiting for job...\n"; 
while($gmworker->work()) 
{ 
    if ($gmworker->returnCode() != GEARMAN_SUCCESS) 
    { 
    echo "return_code: " . $gmworker->returnCode() . "\n"; 
    break; 
    } 
} 

function reverse_fn($job) 
{ 
    return strrev($job->workload()); 
} 

?> 

client.php(客戶端代碼 - 這是我在加載頁面瀏覽器)

<?php 

# Client code 

echo "Starting\n"; 

# Create our client object. 
$gmclient= new GearmanClient(); 

# Add default server (localhost). 
$gmclient->addServer(); 

echo "Sending job\n"; 

$result = $gmclient->do("reverse", "Hello!"); 

echo "Success: $result\n"; 

?> 

下面的評論,它說它正在工作..我重複,它是N OT工作。它似乎只工作,因爲我改變了$ gmclient-> do到$ gmclient-> doBackground輸出作業ID,而不是函數的實際結果。

最後更新(與Solution)

一些工作之後,我想通了,這不是一個編碼錯誤。 Gearman安裝不當。而不是使用apt-get安裝,我決定手動完成。我從gearman站點下載了gearmand(c)(http://gearman.org/index.php?id=download)。然後,我使用了齒輪工作者網站上的教程以及從http://gearman.org/index.php?id=getting_started開始,然後http://gearman.org/index.php?id=gearman_php_extension

+0

如果網頁沒有找到,你就不會得到回報。奇怪我只是再次點擊鏈接並得到回報。 「開始發送工作成功:H:svmain-desktop:57」我將檢查該服務器並確保它正常運行 – 2011-01-06 14:17:58

回答

1

更改您的代碼並使用GearmanClient :: addTask。您可以使用它的返回值來實施監視過程。檢查您可以在GearmanTask類上使用的其他功能。

0
//Wrong 
$gmworker->addServer(); 

//Correct 
$gmworker->addServer("localhost",4730);