PHP實現非同步處理利器 Gearman

2022-09-17 05:06:13 字數 1966 閱讀 6371

通常,多語言多系統之間的整合是個大問題,一般來說,人們多半會採用webservice的方式來處理此類整合問題,但不管採用何種風格的webservice,如rpc風格,或者rest風格,其本身都有一定的複雜性。相比之下,gearman也能實現類似的作用,而且更簡單易用。

乙個gearman請求的處理過程涉及三個角色:client -> job -> worker。

client:請求的發起者,可以是c,php,perl,mysql udf等等。

job:請求的排程者,用來負責協調把client發出的請求**給合適的work。

worker:請求的處理者,可以是c,php,perl等等。

因為client,worker並不限制用一樣的語言,所以有利於多語言多系統之間的整合。

甚至我們通過增加更多的worker,可以很方便的實現應用程式的分布式負載均衡架構。

下面看看如何安裝執行乙個例子,條件所限,我們把client,job,worker三個角色執行在一台伺服器上:

安裝gearman server and library:

wget

tar zxf gearmand-0.8.tar.gz

cd gearmand-0.8

./configure

make

make install

安裝gearman php extension:

wget

tar zxf gearman-0.4.0.tgz

cd gearman-0.4.0

phpize

./configure

make

make install

extension = "gearman.so"

啟動job:

gearmand -d

如果當前使用者是root的話,則需要這樣操作:

gearmand -d -u root

缺省會使用4730埠,下面會用到。

注意:如果找不到gearmand命令的路徑,別忘了用whereis gearmand確認。

編寫worker:

worker.php檔案內容如下:

<?php

$worker= new gearmanworker();

$worker->addserver('127.0.0.1', 4730);

$worker->addfunction('reverse', 'my_reverse_function');

while ($worker->work());

function my_reverse_function($job)

?>

設定後台執行work:

php worker.php &

編寫client:

client.php檔案內容如下:

<?php

$client= new gearmanclient();

$client->addserver('127.0.0.1', 4730);

echo $client->do('reverse', 'hello world!'), "\n";

?>

執行client:

php client.php

輸出:!dlrow olleh

命令工具

如果你覺得安裝php之類的東西太麻煩的話,你也可以僅僅通過命令列工具來體驗gearman的功能:

啟動worker:gearman -w -f wc -- wc -l &

執行client:gearman -f wc < /etc/passwd

具體可以參考官方文件

,還有一些不錯的pdf

php處理非同步請求 PHP非同步請求實現方式

一.使用fsockopen的方式 我們建立了乙個基於fsockopen的函式,這個函式中利用fsockopen去訪問url,但是在訪問時,並不要求獲取url顯示的內容,而是僅僅發出訪問請求,請求到達後馬上關閉這個訪問.使用fsocketopen 方式傳送非同步請求,put方式 stream set ...

php處理非同步請求 PHP實現非同步呼叫方法研究

瀏覽器和伺服器之間是通過 http 協議進行連線通訊的。這是一種基於請求和響應模型的協議。瀏覽器通過 url 向伺服器發起請求,web 伺服器接收到請求,執行一段程式,然後做出響應,傳送相應的html 給客戶端。這就有了乙個問題,web 伺服器執行一段程式,可能幾毫秒就完成,也可能幾分鐘都完不成。如...

php非同步處理

namespace index controller usecore controller class test extends controller public function test12 php非同步請求 param host string 主機位址 param path string 路...