الدفع الفوري عبر Mercure
ينفّذ Doggy الدفع الفوري من الخادم إلى العميل عبر بروتوكول Mercure. يضمّ Mercure Hub مدمجًا في FrankenPHP، ويمكن تفعيله بمجرد التكوين عبر Caddyfile دون الحاجة إلى حاويات أو خدمات إضافية.
البنية
客户端 (EventSource)
↑ SSE
└── http://localhost:8000/.well-known/mercure
↑
Caddyfile (FrankenPHP)
↑ mercure 指令内嵌 Hub
FrankenPHP (内置 Hub)تكوين Caddyfile
يتم تضمين Mercure Hub في Caddyfile الخاص بـ FrankenPHP:
caddy
http://localhost:8000 {
route /.well-known/mercure {
mercure {
transport bolt {
path /var/www/var/mercure.db
}
publisher_jwt !ChangeThisMercureHubJWTSecretKey!
subscriber_jwt !ChangeThisMercureHubJWTSecretKey!
cors_origins http://localhost:8000
publish_origins *
anonymous
}
}
}رمز JWT
ينشئ MercureTokenFactory رموز JWT بصلاحية الاشتراك:
php
// src/Security/MercureTokenFactory.php
$token = $factory->createSubscribeToken(
topics: ['/user/123/*', '/entity/*'],
roles: ['ROLE_USER'],
expiresIn: 3600
);كوكي Mercure
يقوم MercureCookieSubscriber بحقن كوكي mercureAuthorization في كل استجابة:
php
// 自动生成的订阅主题
$topics = [
'https://enterprise.local/user/' . $userId . '/export',
'/user/' . $userId . '/*',
'/entity/*',
];الاشتراك من الواجهة الأمامية
javascript
const url = new URL('/.well-known/mercure', window.location.origin);
url.searchParams.append('topic', '/user/' + userId + '/*');
const eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
// 处理推送消息
};التطبيقات الأساسية
- تقدم التصدير: دفع فوري لتقدم تصدير الملفات الكبيرة
- حالة التواجد:
PresenceService+PresenceApiController - الإشعارات الفورية: رسائل النظام وتنبيهات الموافقات
- مزامنة البيانات: تحديث فوري للتعاون متعدد المستخدمين