客戶端請求
use Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require 'vendor/autoload.php';
$worker = new Worker();
$worker->onWorkerStart = function(){
for($i=0;$i<10;$i++){
$task_connection = new AsyncTcpConnection('Text://192.168.1.128:12345');
// 任務及參數(shù)數(shù)據(jù)
$task_data = array(
'function' => 'send_mail',
'args' => array('from'=>'xxx', 'to'=>'xxx', 'contents'=>'xxx'),
);
// 發(fā)送數(shù)據(jù)
$task_connection->onConnect = function($task_connection) use($task_data){
echo 2;
$task_connection->send(json_encode($task_data));
};
// 異步獲得結果
$task_connection->onMessage = function($task_connection, $task_result){
// 結果
// 獲得結果后記得關閉異步連接
$task_connection->close();
// 通知對應的websocket客戶端任務完成
};
$task_connection->onError = function(){
echo 6;
};
// 執(zhí)行異步連接
$task_connection->connect();
}
};
Worker::runAll();
服務端代碼
use Workerman\Worker;
require_once 'vendor/autoload.php';
// task worker,使用Text協(xié)議
$task_worker = new Worker('Text://0.0.0.0:12345');
// task進程數(shù)可以根據(jù)需要多開一些
$task_worker->count = 100;
$task_worker->name = 'TaskWorker';
//只有php7才支持task->reusePort,可以讓每個task進程均衡的接收任務
$task_worker->reusePort = true;
$task_worker->onMessage = function($connection, $task_data)
{
// 假設發(fā)來的是json數(shù)據(jù)
$task_data = json_decode($task_data, true);
echo 1;
sleep(10);//模擬進程阻塞
$connection->send(json_encode($task_data));
};
Worker::runAll();
運行結果服務端還是在一個進程中運行