我在start_businessworker.php设置为 $worker->count=2。
然后在 Event.php onWorkerStart中编写 第一个进程的业务逻辑代码,另一个进程没有编写任何代码,是不是另一个进程这样就没什么作用了。
// bussinessWorker 进程
$worker = new BusinessWorker();
// worker名称
$worker->name = 'YourAppBusinessWorker';
// bussinessWorker进程数量
$worker->count = 2;
// 服务注册地址
$worker->registerAddress = '127.0.0.1:1510';
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START')) {
Worker::runAll();
}
class Events
{
public static function onWorkerStart($businessWorker)
{
if ($businessWorker->id == 0) {
//编写业务逻辑
}
是的
那我要处理大量的业务逻辑,要查询数据库等,并且推送给相关客户端。只在那一个进程里面写,这样会不会导致workerman堵塞,甚至异常。
那我要处理大量的业务逻辑,要查询数据库等,并且推送给相关客户端。只在那一个进程里面写,这样会不会导致workerman堵塞,甚至异常。
不会堵塞, bussinessWorker进程执行一次然后结果交给gateway去推送
超出一定量的业务逻辑一个进程肯定撑不住,会堵塞,数据库查询不是异步更会堵塞。但为什么不多进程???
你的意思是,把业务逻辑拆分出来,部分业务逻辑对应一个进程。是这样吗?
这样是可以的,简单的做法是逻辑不拆分,但同时运行多个
@th如果逻辑不拆分,同时运行4个进程,那这样岂不是更浪费服务器资源。如果是这种模式的话,相同逻辑就要执行4次!我用定时器从数据库取出数据,然后推送给相关客户端,这样就会推送4次相同结果的数据。我理解的是这样的,不知道对不对。
有人要吃蛋炒饭,要每个厨师都给他做就是同时做了4份,但他只要一份就行了
1、若业务阻塞就会导致进程阻塞,比如查询数据库这种外部IO,如果执行缓慢就会导致进程挂起,题主描述很符合繁重业务场景,所以应该再另起一组任务集群异步处理业务。
2、应该用多进程模型更合理。
我准备用消息中间件处理异步业务。你说的这个多进程模型应该怎么应用更合理
消息中间件也可以; 我说的异步模型见官方手册:
http://doc.workerman.net/faq/async-task.html