客戶端請(qǐng)求
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');
// 任務(wù)及參數(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));
};
// 異步獲得結(jié)果
$task_connection->onMessage = function($task_connection, $task_result){
// 結(jié)果
// 獲得結(jié)果后記得關(guān)閉異步連接
$task_connection->close();
// 通知對(duì)應(yīng)的websocket客戶端任務(wù)完成
};
$task_connection->onError = function(){
echo 6;
};
// 執(zhí)行異步連接
$task_connection->connect();
}
};
Worker::runAll();
服務(wù)端代碼
use Workerman\Worker;
require_once 'vendor/autoload.php';
// task worker,使用Text協(xié)議
$task_worker = new Worker('Text://0.0.0.0:12345');
// task進(jìn)程數(shù)可以根據(jù)需要多開(kāi)一些
$task_worker->count = 100;
$task_worker->name = 'TaskWorker';
//只有php7才支持task->reusePort,可以讓每個(gè)task進(jìn)程均衡的接收任務(wù)
$task_worker->reusePort = true;
$task_worker->onMessage = function($connection, $task_data)
{
// 假設(shè)發(fā)來(lái)的是json數(shù)據(jù)
$task_data = json_decode($task_data, true);
echo 1;
sleep(10);//模擬進(jìn)程阻塞
$connection->send(json_encode($task_data));
};
Worker::runAll();
運(yùn)行結(jié)果服務(wù)端還是在一個(gè)進(jìn)程中運(yùn)行
設(shè)置下
$task_worker->reusePort = true;
這個(gè)選項(xiàng)在php7下才有效
感謝回復(fù),我設(shè)置了的。我看了下文檔說(shuō)windows下不支持多進(jìn)程,$task_worker->count = 100屬性設(shè)置沒(méi)用,應(yīng)該是這個(gè)原因造成的