Skip to content

الدفع الفوري عبر 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
  • الإشعارات الفورية: رسائل النظام وتنبيهات الموافقات
  • مزامنة البيانات: تحديث فوري للتعاون متعدد المستخدمين

مصدر مفتوح برخصة MIT | حقوق النشر © 2026 Doggy