workerman服务端
$task_worker = new Worker('Text://127.0.0.1:2345');
// task进程数可以根据需要多开一些
$task_worker->count = 100;
$task_worker->name = 'server_worker';
$task_worker->onMessage = function($connection, $task_data)
{
$task_data = json_decode($task_data, true);
$type = $task_data['type'];
if($type == "check_domain"){
echo $task_data['domain'] . "\n";
if($task_data['key'] == 0){
sleep(5); //第一条数据停留5秒
}
$connection->send("End");
}else{
$connection->send("未做任何处理");
}
};
Worker::runAll();
workerman调用
for ($x=0; $x<= 50; $x++) {
$task_data['key'] = $x;
$task_connection = new AsyncTcpConnection('Text://127.0.0.1:2345');
$task_connection->send(json_encode($task_data));
$task_connection->onMessage = function($task_connection, $task_result)use($ws_connection)
{
dump($task_result);
$task_connection->close(); // 获得结果后记得关闭异步连接
// 通知对应的websocket客户端任务完成
$ws_connection->send('task complete');
};
$task_connection->connect();
}
curl在调用的时候发现第一条数据等待了5秒才执行第二条,既然AsyncTcpConnection是异步的,即使写了sleep,也不应该用等待啊
这个应该不是多线程的吧,AsyncTcpConnection 本身是IO异步非阻塞的,但是业务逻辑都是同步顺序执行的,执行应该还是单进程吧
嗯,我的需求是这样的,有100条数据,要循环请求接口,接口请求可能需要1~2秒,让它异步执行,应该怎么做呢。