修复推送报错:确定为服务端没有安装webman/push扩展,移除冗余代码

This commit is contained in:
2026-04-20 16:34:19 +08:00
parent 3e6a3cd590
commit 17eadddaa2
3 changed files with 13 additions and 49 deletions

View File

@@ -1,41 +0,0 @@
<?php
declare(strict_types=1);
namespace app\process;
use support\Log;
use Throwable;
use Webman\Push\Server;
use Workerman\Timer;
use Workerman\Worker;
/**
* Workerman 5 在 Fiber 中拉起 Push 时,内嵌 HTTP API默认 3232可能与事件循环初始化时序冲突导致本机无法连接、业务 trigger 全部失败。
* 延后一拍再 listenTimer 第四参数须为 false否则会按 repeat 每 0.01s 重复创建 Worker。
*/
final class WebmanPushServer extends Server
{
public function onWorkerStart($worker): void
{
$apiListen = $this->apiListen;
$self = $this;
Timer::add(
0.01,
static function () use ($apiListen, $self): void {
try {
$apiWorker = new Worker($apiListen);
$apiWorker->onMessage = [$self, 'onApiClientMessage'];
$apiWorker->listen();
} catch (Throwable $e) {
Log::error('WebmanPushServer HTTP API listen failed: ' . $e->getMessage());
}
},
[],
false
);
Timer::add($this->keepAliveTimeout / 2, [$this, 'checkHeartbeat']);
Timer::add($this->webHookDelay, [$this, 'webHookCheck']);
}
}

View File

@@ -1,10 +1,10 @@
<?php
use app\process\WebmanPushServer;
use Webman\Push\Server;
return [
'server' => [
'handler' => WebmanPushServer::class,
'handler' => Server::class,
'listen' => config('plugin.webman.push.app.websocket'),
'count' => 1, // 必须是1
'reloadable' => false, // 执行reload不重启

View File

@@ -134,7 +134,6 @@ interface Snapshot {
const { t } = useI18n()
const loading = ref(false)
const pushConnected = ref(false)
const lastPushAt = ref(0)
const snapshot = reactive<Snapshot>({
record: null,
bets: [],
@@ -271,10 +270,12 @@ async function initPush() {
pushClient = new PushCtor({ url, app_key })
pushChannel = pushClient.subscribe(channel)
pushConnected.value = false
pushChannel.on('pusher:subscription_succeeded', () => {
pushConnected.value = true
})
startPushWatchdog()
stopPolling()
pushChannel.on(event, (payload: anyObj) => {
lastPushAt.value = Date.now()
pushConnected.value = true
snapshot.record = payload.record || null
snapshot.bets = payload.bets || []
@@ -417,10 +418,14 @@ function startPushWatchdog() {
return
}
pushWatchdogTimer = window.setInterval(() => {
const state = pushClient && pushClient.connection ? String(pushClient.connection.state || '') : ''
const stateConnected = state === 'connected' || state === 'connecting'
const hasRecentPush = lastPushAt.value > 0 && Date.now() - lastPushAt.value <= 6000
if (!stateConnected || !hasRecentPush) {
if (!pushClient || !pushClient.connection) {
pushConnected.value = false
return
}
const state = String(pushClient.connection.state || '')
// push.jsonOpen 后长期为 connecting必须收到 pusher:connection_established 才变 connected。
// 把 connecting 当「已连接」会误报绿条Nginx 只完成握手、帧未透传时 DevTools 消息列表为空)。
if (state === 'disconnected') {
pushConnected.value = false
}
}, 1000)