پرش به محتوا

امکانات

بخش سختِ بی‌درنگ، از قبل در حال اجرا

یک قابلیت بی‌درنگ کمی کد محصول است روی انبوهی از سازوکار تحویل: چه کسی مشترک است، چه کسی اجازه دارد، چه کسی هنوز آنجاست. PushCaster همان بخش دوم است.

کانال‌ها

چهار نوع، و پیشوند همان قرارداد است

نام یک کانال رفتارش را تعیین می‌کند. پیشوند به کتابخانه می‌گوید که آیا باید از سرور شما اجازه بگیرد، آیا باید منتظر فهرست اعضا باشد، و آیا باید رمزگذاری کند.

انواع کانال، اینکه چه کسی می‌تواند مشترک شود، به چه دردی می‌خورند، و اشتراک چطور اجازه می‌گیرد
پیشوندچه کسی می‌تواند مشترک شودبه چه درد می‌خورداحراز
publicهر کسی که app key را داشته باشد.وضعیت بیلد، نتیجهٔ زندهٔ بازی، خوراک‌های عمومی.ندارد
private-سرور شما تصمیم می‌گیرد، برای هر مشترک جدا.هر چیزی که به یک حساب یا یک منبع محدود باشد.امضاشده
presence-اجازه‌دار، و فهرست اعضا را هم می‌آورد.اتاق‌ها و نشست‌ها، جایی که خودِ عضویت همان قابلیت است.امضاشده
private-encrypted-اجازه‌دار؛ پی‌لودها را کلاینت‌های شما رمز می‌کنند.پی‌لودهایی که باید برای ما هم ناخوانا بمانند.امضاشده

cache- رویدادهای زنده را تحویل می‌دهند اما وضعیت ذخیره‌شده را دوباره پخش نمی‌کنند — نگاه کنید به تفاوت‌های شناخته‌شده.

احراز دسترسی

سرور شما همچنان مرجع است

اشتراک در کانال‌های private و presence را ما نمی‌دهیم. اپلیکیشن شما می‌دهد و جوابش را با app سکرت خودتان امضا می‌کند. ما امضا را بررسی می‌کنیم و همین.

  • یک اندپوینتPOST /pusher/auth همان شکل درخواست و پاسخ را نگه می‌دارد.
  • قاعده‌های شمااینکه این سوکت اجازهٔ پیوستن به این کانال را دارد یا نه، پرسشی است که فقط شما می‌توانید جوابش را بدهید.
  • هویت در presenceهمان فراخوانی، شناسهٔ عضو و هر چیز دیگری را که باید بقیه ببینند برمی‌گرداند.
routes/pusher-auth.js
js
import Pusher from 'pusher'const pusher = new Pusher({  appId: process.env.PUSHCASTER_APP_ID,  key: process.env.PUSHCASTER_KEY,  secret: process.env.PUSHCASTER_SECRET,  host: 'api-eu1.pushcaster.io',  useTLS: true,})// Called by the client library whenever it subscribes to a// private-, presence- or private-encrypted- channel.app.post('/pusher/auth', (req, res) => {  const { socket_id, channel_name } = req.body  const user = req.session.user  if (!user || !mayJoin(user, channel_name)) {    return res.sendStatus(403)  }  res.send(    pusher.authorizeChannel(socket_id, channel_name, {      user_id: String(user.id),      user_info: { name: user.name },    }),  )})

وب‌هوک‌ها

آنچه لایهٔ سوکت می‌بیند، بک‌اند شما می‌شنود

حضور و عضویت فقط سر اتصال دیده می‌شوند. وب‌هوک‌ها آن‌ها را امضاشده برمی‌گردانند — تا وقتی اولین بیننده می‌آید کار را شروع کنید و وقتی آخرین نفر می‌رود متوقفش کنید.

انواع رویداد وب‌هوک و اینکه هرکدام کِی فعال می‌شوند
رویدادکِی فعال می‌شود
channel_occupiedاولین مشترک به یک کانال خالی پیوست.
channel_vacatedآخرین مشترک رفت.
member_addedکسی به یک کانال از نوع presence پیوست.
member_removedکسی از یک کانال از نوع presence رفت.
client_eventیک کلاینت رویدادی را مستقیم به یک کانال فرستاد.
cache_missاز یک کانال از نوع cache وضعیتی خواسته شد که نداشت.
routes/webhooks.js
js
app.post('/pushcaster/webhooks', (req, res) => {  const hook = pusher.webhook({ headers: req.headers, rawBody: req.rawBody })  // The signature is computed with your app secret, so an  // unsigned or mismatched delivery never reaches your logic.  if (!hook.isValid()) return res.sendStatus(401)  for (const event of hook.getEvents()) {    if (event.name === 'channel_occupied') startFeed(event.channel)    if (event.name === 'channel_vacated') stopFeed(event.channel)  }  res.sendStatus(200)})

کتابخانه‌ها

SDK اختصاصی PushCaster وجود ندارد، عمداً

PushCaster روی سیم به پروتکل Pusher Channels حرف می‌زند، پس کتابخانه‌های رسمی بدون تغییر با آن کار می‌کنند. نه بسته‌ای از ما برای اضافه‌کردن، و نه چیزی که وقتی نسخهٔ تازه می‌دهیم بشکند.

  • pusher-js
  • Laravel Echo
  • pusher/pusher-php-server
  • pusher-http-node
  • Python
  • Go
  • Ruby
  • Java
  • Android
  • iOS
  • Flutter
  • Unity

خط نصب، کامل: npm i pusher-js.

زیرساخت

دو لایه، و کلاستری که خودتان انتخاب می‌کنید

تحویل روی لایه‌ای جدا از صورت‌حساب و پیکربندی اجرا می‌شود، پس از کار افتادن control plane داشبورد را افت می‌دهد بی‌آنکه تحویل را قطع کند.

همین حالا در حال اجرا

  • eu1غرب اروپا
  • eu2مرکز اروپا

کلاسترها برای پیام‌رسانی دسترس‌پذیری بالا دارند و برای presence نه: اگر حافظهٔ presence از دست برود، presence و شمارش حاضران افت می‌کند در حالی که کانال‌های public و private همچنان تحویل می‌دهند. بهتر است اینجا بخوانیدش تا بعداً کشفش کنید.

ببینید یک انتشار چه مسیری را طی می‌کند

یک اپلیکیشن بسازید و یک کلاینت وصل کنید.

Support