從swoole過(guò)來(lái),今天在評(píng)估是否可以用webman開(kāi)發(fā)下一個(gè)項(xiàng)目,發(fā)現(xiàn)基本都滿足需求,但是有一個(gè)問(wèn)題沒(méi)搞明白:請(qǐng)問(wèn)webman的控制器如何與自定義進(jìn)程通信?
比如這是我的自定義進(jìn)程,基本目的是本地緩存多個(gè)小數(shù)據(jù),組成batch然后發(fā)送到sqs
class Sqs
{
private $queueData = [];
public function onWorkerStart()
{
// 每隔5秒 flush 到 sqs
Timer::add(5, function(){
$currentData = array_splice($this->queueData, 0);
file_put_contents('/tmp/sqs,txt', var_export($currentData, true), FILE_APPEND);
});
}
public function onMessage(TcpConnection $connection, $data)
{
echo "onMessage\n";
echo "$data\n";
$this->queueData[] = $data;
}
}
目前看文檔好像有兩種方式:
// config/process.php
'sqs'=>[
'handler' => process\Sqs::class,
'listen' => 'text://0.0.0.0:9090',
]
// IndexController.php
function index(){
if(!$process){
$process = new TcpConnection('text://0.0.0.0:9090');
}
$process->send("some data...");
}
2 用Channel分布式通訊組件,感覺(jué)走了彎路
有沒(méi)有在控制器里面直接往這個(gè)自定義進(jìn)程發(fā)送數(shù)據(jù)的方法?類(lèi)似
process('Sqs')->write("some data.....")
這個(gè)涉及到進(jìn)程間通信
推薦走text協(xié)議,通過(guò)tcp發(fā)送數(shù)據(jù)給自定義進(jìn)程