public function onMessage(AsyncTcpConnection $connection, $data)
{
Cache::set('send', $data, false);
$connection->send($data.'1111');
}
public function onClose(AsyncTcpConnection $connection)
{
Cache::set('onClose', true, false);
}
controller:
$task_connection = new AsyncTcpConnection('text://127.0.0.1:8888');
$task_connection->send('aa');
$task_connection->onMessage = function (AsyncTcpConnection $connection, $result) use ($task_connection) {
Cache::set('task', $result);
};
$task_connection->connect();
return $this->success('ok');
逻辑大概就是: 开一个自定义进程,里面监听text 协议,然后里面接收到正确同步消息的时候,去同步数据.
你api接口收到同步请求,接着发送同步请求消息到自定义进程里面,然后响应前端任务提交成功.
首先非常感谢,我按照官方和大家的思路,做了如下三步。
process配置如下:
'sync_task' => [
'handler' => process\SyncTask::class,
'listen' => 'text://0.0.0.0:8888',
'count' => 5,
'reusePort' => true
],
SyncTask:
controller:
以上不知道是否正确,前端请求直接返回成功,但是缓存中没有存入任何数据,是没有执行异步任务吗?不知道这样哪里错了,请大佬们指点。
1 控制器代码用下面函数通知自定义进程.
2 SyncTask 里面onMessage 里面send 后直接调用$connection->close();关闭链接.
3 执行异步任务是在自定义进程 SyncTask 里面调用同步数据代码,你上面没看到有调用逻辑.
谢谢,已经执行!