وحدة خادم SERTING-SENT-ENGENT (SSE) لـ ADONISJS.
ADONISJS Transmit هي وحدة النمطية للأحداث المحلية (SSE) لـ ADONISJS. يوفر واجهة برمجة تطبيقات بسيطة لإرسال الأحداث إلى العميل. كما يدعم Redis كطبقة نقل للبث لأحداث البث لخوادم أو مثيلات متعددة.
إليك بعض الأشياء التي يجب أن تعرفها قبل استخدام هذه الوحدة.
الاتصالات أحادية الاتجاه: يحدث نقل البيانات فقط من خادم إلى آخر ، وليس العكس.
البيانات النصية فقط: تدعم SSE فقط نقل البيانات النصية ، لا يمكن إرسال البيانات الثنائية.
بروتوكول HTTP: البروتوكول الأساسي المستخدم هو HTTP العادي ، وليس أي بروتوكول خاص أو خاص.
تثبيت
الاستخدام
القنوات
أسماء القنوات
ترخيص القناة
مزامنة
بينغ
الأحداث
قم بتثبيت الحزمة من سجل NPM على النحو التالي:
عقدة ACE إضافة @adonisjs/الإرسال
تعرض الوحدة مثيل transmit
، والذي يمكن استخدامه لإرسال الأحداث إلى العميل.
استيراد الإرسال من '@adonisjs/transmit/services/main' // في أي مكان في codetransmit.broadcast ('channelname' ، {username: 'lanz'})
القنوات هي وسيلة لتجميع الأحداث. على سبيل المثال ، يمكنك الحصول على قناة users
وآخر posts
. يمكن للعميل الاشتراك في قناة واحدة أو أكثر لتلقي الأحداث.
يجب أن تكون أسماء القنوات سلسلة ويجب ألا تحتوي على أي أحرف خاصة باستثناء /
. فيما يلي أسماء القنوات صالحة.
transmit.broadcast ('Users' ، {username: 'lanz'}) transmit.broadcast ('Users/1' ، {username: 'lanz'}) transmit.broadcast ('المستخدمين/1/posts' ، {username: ' لانز})
يمكنك وضع علامة على قناة خاصة ومن ثم تفويض العميل للاشتراك فيه. يتم التفويض باستخدام وظيفة رد الاتصال.
// start/transmit.tsimport type {httpcontext} من '@adonisjs/core/http'transmit.authorize <{id: string}> (' المستخدمين/: id '، (ctx: httpcontext ، {id}) => { إرجاع ctx.auth.user؟ .Id === +id})
ملحوظة
لا تنس إضافة ملف start/transmit.ts
داخل صفيف preloads
لملف adonisrc.ts
.
عندما يحاول أحد العميل الاشتراك في قناة خاصة ، يتم استدعاء وظيفة رد الاتصال باستخدام معاملات القناة وسياق HTTP. يجب أن تُرجع وظيفة رد الاتصال قيمة منطقية للسماح بالاشتراك أو عدم السماح به.
يدعم الإرسال مزامنة الأحداث عبر خوادم أو مثيلات متعددة باستخدام طبقة النقل. يمكنك تمكين المزامنة عن طريق تغيير التكوين والإشارة إلى برنامج التشغيل الخاص بك (Redis فقط متاح حتى الآن).
// config/transmit.tsimport env من '#start/env'import {defectionfig} من'@adonisjs/transmit'import {redis} من '@adonisjs/transmit/transports'export defineconfig ({{{{ النقل: {Driver: Redis ({Host: Env.get ('redis_host') ، المنفذ: env.get ('redis_port') ، كلمة المرور: env.get ('redis_password') ،}) }})
ملحوظة
تأكد من تثبيت ioredis
عند استخدام برنامج تشغيل redis
.
يدعم إرسال عميل العميل للحفاظ على الاتصال على قيد الحياة. يمكنك تمكين pinging عن طريق تغيير التكوين.
// config/transmit.tsimport {defereconfig} من '@adonisjs/transmit'import {redis} من'@adonisjs/transmit/transports'export default default ({{{ Pinginterval: '1m' ،})
يستخدم Transmit باعث لإبعاد أي أحداث دورة حياة. يمكنك الاستماع للأحداث باستخدام on
.
transmit.on ('connect' ، ({uid}) => { console.log (`connection: $ {uid}`)}) transmit.on ('disconnect' ، ({uid}) => { console.log (`disconnected: $ {uid}`)}) transmit.on ('broadcast' ، ({channel}) => { console.log (`البث إلى القناة $ {Channel}`)}) transmit.on ('اشتراك' ، ({uid ، channel}) => { console.log (`مشترك $ {uid} إلى $ {channel}`)}) transmit.on ('unbscribe' ، ({uid ، channel}) => { console.log (`unsubscribed $ {uid} من $ {Channel}`)})