Closed ffxhd closed 4 years ago
onWorkerStart 分为 onMainWorkerStart 和onTaskWorkerStart onWorkerStop、onWorkerExit、onWorkerError同此。
这样一来,就不必要写
$workerObj = new \must\WorkersCommon(); $server->on('workerStart', [ $workerObj, 'onWorkerStart']);//目前 $server->on('workerError', [ $workerObj, 'onWorkerError']);//目前
(意味着,不必要使用if-else小心翼翼地在mainWorker和taskWorker之间切换思维) 只需
$mainObj = new \must\MainWorkers();//不再需要继承上文的WorkersCommon $server->on('Connect', [ $mainObj, 'onConnect' ]); $server->on('Close', [ $mainObj, 'onClose' ]); $server->on('Request', [ $mainObj, 'onRequest' ]); $server->on('Finish', [ $mainObj, 'onFinish']); $server->on('Receive', [ $mainObj, 'onReceive' ]); $server->on('MainWorkerStart', [ $workerObj, 'onMainWorkerStart']);//新增 $server->on('MainWorkerError', [ $workerObj, 'onMainWorkerError']);//新增 $taskObj = new \must\TaskWorkers();//不再需要继承上文的WorkersCommon $server->on('Task', [ $taskObj, 'onTask']); $server->on('TaskWorkerStart', [ $workerObj, 'onTaskWorkerStart']);//新增 $server->on('TaskWorkerError', [ $workerObj, 'onTaskWorkerError']);//新增
(切换类文件,思路也随之切换)
一个http请求进赖,如果mainWorker亲自处理业务,则同一个mainWorker中请求就得排队,逐个处理,简单的业务逻辑由于排队反而比较费时间。因此,mainWorker派了一个任务给taskWorker, 由taskWorker完成业务处理,处理完成后通知mainWorker响应数据给客户端。
因此,mainWorker和taskWorker,能力不同,职责也不同,对于启动、停止、出错的处理方式也就不同。(比如,mainWorker出错的话,不应自己亲自发邮件通知开发者,避免http请求进行不必要的等待;而应派发任务给taskWorker, 而taskWorker出错的话,则亲自发送邮件给开发者)onWorker开头的事件区分开为onMainWorker开头的事件和onTaskWorker开头的事件, 有利于避免思维混淆,更能够发挥各自的长处。
应该在框架层实现, 和路由一个道理
通过 Server::isTaskWorker() 判断会更好。
onWorkerStart 分为 onMainWorkerStart 和onTaskWorkerStart onWorkerStop、onWorkerExit、onWorkerError同此。
这样一来,就不必要写
(意味着,不必要使用if-else小心翼翼地在mainWorker和taskWorker之间切换思维) 只需
(切换类文件,思路也随之切换)
一个http请求进赖,如果mainWorker亲自处理业务,则同一个mainWorker中请求就得排队,逐个处理,简单的业务逻辑由于排队反而比较费时间。因此,mainWorker派了一个任务给taskWorker, 由taskWorker完成业务处理,处理完成后通知mainWorker响应数据给客户端。
因此,mainWorker和taskWorker,能力不同,职责也不同,对于启动、停止、出错的处理方式也就不同。(比如,mainWorker出错的话,不应自己亲自发邮件通知开发者,避免http请求进行不必要的等待;而应派发任务给taskWorker, 而taskWorker出错的话,则亲自发送邮件给开发者)onWorker开头的事件区分开为onMainWorker开头的事件和onTaskWorker开头的事件, 有利于避免思维混淆,更能够发挥各自的长处。