pref: Enhance TrafficFetch Performance and Optimize Code Structure

This commit is contained in:
xboard
2024-11-29 19:22:12 +08:00
parent 0e9739af0b
commit f86ccae28c
2 changed files with 11 additions and 28 deletions
+10 -27
View File
@@ -2,6 +2,7 @@
namespace App\Jobs; namespace App\Jobs;
use App\Models\User;
use Illuminate\Bus\Queueable; use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Foundation\Bus\Dispatchable;
@@ -17,7 +18,7 @@ class BatchTrafficFetchJob implements ShouldQueue
protected $protocol; protected $protocol;
protected $timestamp; protected $timestamp;
public $tries = 1; public $tries = 1;
public $timeout = 10; public $timeout = 20;
/** /**
* Create a new job instance. * Create a new job instance.
@@ -36,34 +37,16 @@ class BatchTrafficFetchJob implements ShouldQueue
public function handle(): void public function handle(): void
{ {
// 获取子节点
$targetServer = $this->childServer ?? $this->server; $targetServer = $this->childServer ?? $this->server;
foreach ($this->data as $uid => $v) { foreach ($this->data as $uid => $v) {
$u = $v[0]; User::where('id', $uid)
$d = $v[1]; ->incrementEach(
$result = \DB::transaction(function () use ($uid, $u, $d, $targetServer) { [
$user = \DB::table('v2_user')->lockForUpdate()->where('id', $uid)->first(); 'u' => $v[0] * $targetServer['rate'],
if (!$user) { 'd' => $v[1] * $targetServer['rate'],
return true; ],
} ['t' => time()]
$newTime = time(); );
$newU = $user->u + ($u * $targetServer['rate']);
$newD = $user->d + ($d * $targetServer['rate']);
$rows = \DB::table('v2_user')
->where('id', $uid)
->update([
't' => $newTime,
'u' => $newU,
'd' => $newD,
]);
if ($rows === 0) {
return false;
}
return true;
}, 3);
if (!$result) {
TrafficFetchJob::dispatch($u, $d, $uid, $targetServer, $this->protocol);
}
} }
} }
} }
+1 -1
View File
@@ -196,7 +196,7 @@ class ServerService
// 获取可用的用户列表 // 获取可用的用户列表
public static function getAvailableUsers($groupId): Collection public static function getAvailableUsers($groupId): Collection
{ {
return \DB::table('v2_user') return User::toBase()
->whereIn('group_id', $groupId) ->whereIn('group_id', $groupId)
->whereRaw('u + d < transfer_enable') ->whereRaw('u + d < transfer_enable')
->where(function ($query) { ->where(function ($query) {