refactor: all-in-one docker deployment with auto-tuned resources and per-mode compose templates
This commit is contained in:
@@ -47,14 +47,15 @@ class XboardUpdate extends Command
|
||||
$this->info('正在检查并安装默认插件...');
|
||||
PluginManager::installDefaultPlugins();
|
||||
$this->info('默认插件检查完成');
|
||||
// Artisan::call('reset:traffic', ['--fix-null' => true]);
|
||||
$this->info('正在重新计算所有用户的重置时间...');
|
||||
Artisan::call('reset:traffic', ['--force' => true]);
|
||||
$updateService = new UpdateService();
|
||||
$updateService->updateVersionCache();
|
||||
$themeService = app(ThemeService::class);
|
||||
$themeService->refreshCurrentTheme();
|
||||
Artisan::call('horizon:terminate');
|
||||
try {
|
||||
Artisan::call('horizon:terminate');
|
||||
} catch (\Throwable $e) {
|
||||
$this->warn('horizon:terminate skipped: ' . $e->getMessage());
|
||||
}
|
||||
$this->info('更新完毕,队列服务已重启,你无需进行任何操作。');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,10 @@ namespace App\Http\Controllers\V2\Server;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ServerService;
|
||||
use App\WebSocket\NodeWorker;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class ServerController extends Controller
|
||||
{
|
||||
@@ -16,14 +18,14 @@ class ServerController extends Controller
|
||||
{
|
||||
$websocket = ['enabled' => false];
|
||||
|
||||
if ((bool) admin_setting('server_ws_enable', 1)) {
|
||||
if ((bool) admin_setting('server_ws_enable', 1) && Cache::has(NodeWorker::HEARTBEAT_CACHE_KEY)) {
|
||||
$customUrl = trim((string) admin_setting('server_ws_url', ''));
|
||||
|
||||
if ($customUrl !== '') {
|
||||
$wsUrl = rtrim($customUrl, '/');
|
||||
} else {
|
||||
$wsScheme = $request->isSecure() ? 'wss' : 'ws';
|
||||
$wsUrl = "{$wsScheme}://{$request->getHost()}:8076";
|
||||
$wsUrl = "{$wsScheme}://{$request->getHttpHost()}/ws";
|
||||
}
|
||||
|
||||
$websocket = [
|
||||
|
||||
@@ -19,6 +19,10 @@ class NodeWorker
|
||||
private const AUTH_TIMEOUT = 10;
|
||||
private const PING_INTERVAL = 55;
|
||||
|
||||
public const HEARTBEAT_CACHE_KEY = 'ws_server:heartbeat';
|
||||
private const HEARTBEAT_INTERVAL = 10;
|
||||
private const HEARTBEAT_TTL = 30;
|
||||
|
||||
private Worker $worker;
|
||||
|
||||
private array $handlers = [
|
||||
@@ -70,6 +74,11 @@ class NodeWorker
|
||||
|
||||
private function setupTimers(): void
|
||||
{
|
||||
Cache::put(self::HEARTBEAT_CACHE_KEY, time(), self::HEARTBEAT_TTL);
|
||||
Timer::add(self::HEARTBEAT_INTERVAL, function () {
|
||||
Cache::put(self::HEARTBEAT_CACHE_KEY, time(), self::HEARTBEAT_TTL);
|
||||
});
|
||||
|
||||
Timer::add(self::PING_INTERVAL, function () {
|
||||
$seen = [];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user