Files
cunkebao_v3/Server/application/common/TaskServer.php
2025-05-22 15:50:52 +08:00

84 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common;
use think\Db;
use think\facade\Log;
use Workerman\Lib\Timer;
use think\worker\Server;
class TaskServer extends Server
{
const PROCESS_COUNT = 4;
protected $socket = 'text://0.0.0.0:2980';
protected $option = [
'count' => self::PROCESS_COUNT,
'name' => 'ckb_task_server'
];
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg)
{
Log::record("error $code $msg");
}
public function onMessage($connection, $data) {}
public function onClose($connection) {}
public function onConnect($connection) {}
public function onWorkerStart($worker)
{
$current_worker_id = $worker->id;
// echo "current_worker_id: $current_worker_id\n";
$process_count_for_status_0 = self::PROCESS_COUNT - 1;
// todo 临时测试,回头封装到类里调用,每个任务一个类
Timer::add(5, function () use ($current_worker_id, $process_count_for_status_0) {
if ($current_worker_id == self::PROCESS_COUNT - 1) {
// TODO 专门检查添加后的情况,是否通过
$tasks = Db::name('task_customer')
->where('status', 1)
->limit(100)
->select();
if ($tasks) {
// TODO 检查是否添加成功是否需要再次发送然后更新状态为2或3 ...
}
} else {
// 其他任务 -- 现在只用于处理场景获客的后置操作(处理 status = 0 的数据);可添加其他任务进来~
$tasks = Db::name('task_customer')
->where('status', 0)
->whereRaw("id % $process_count_for_status_0 = {$current_worker_id}")
->limit(100)
->select();
if ($tasks) {
// ... 更新状态为1然后处理再更新为2或3 ...
}
}
});
}
}