پرش به محتوا

سازگاری

یک بک‌اند بی‌درنگ سازگار با Pusher

PushCaster روی سیم به نسخهٔ ۷ پروتکل Pusher Channels حرف می‌زند. جابه‌جا شدن یعنی پیکربندی، نه بازنویسی — و این صفحه دقیقاً فهرست همان چیزهایی است که عوض می‌شوند.

بدون بازنویسی اپلیکیشن. فقط تغییر پیکربندی اتصال لازم است. سه تا شش خط برای هر اپلیکیشن؛ و برای Laravel، یک تغییر در .env و همین. نه drop-in است و نه zero-config: باید هاست را تنظیم کنید، و کلیدها تازه‌اند.

چه چیزی همان می‌ماند

سیم، کتابخانه‌ها و دست‌دادنِ احراز هویت

سازگاری اینجا یعنی خودِ پروتکل، نه شباهت — قالب درخواست/پاسخ، معنای رویدادها و طرح احراز هویتِ سازگار.

آنچه هنگام جابه‌جایی از Pusher Channels به PushCaster تغییر نمی‌کند
حوزهچه چیزی تغییر نمی‌کند
پروتکلنسخهٔ ۷ پروتکل Pusher Channels روی سیم.
کتابخانه‌های کلاینتpusher-js، Laravel Echo و کتابخانه‌های رسمی موبایل، بدون تغییر.
کتابخانه‌های سرورpusher-php-server، pusher-http-node، و کتابخانه‌های Python، Go، Ruby و Java.
امضاهاطرح امضا و نرمال‌سازی سازگار.
انواع کانالpublic، private، presence و private-encrypted، با همان پیشوندها.
احراز اشتراکPOST /pusher/auth همان شکل درخواست و پاسخ را نگه می‌دارد.
رویدادهای کلاینتمیان مشترک‌ها روی کانال‌های private و presence، مثل قبل.
وب‌هوک‌هاهمان نام فیلدها و هدرها، از جمله channel_occupied، member_added و cache_miss.

نسخه‌های آزمایش‌شدهٔ SDK

با نسخه‌های فهرست‌شدهٔ SDK پوشر سازگار است، بدون تغییر در خودِ آن SDKها.

نسخه‌هایی از SDK پوشر که مجموعهٔ سازگاری روی آن‌ها اجرا می‌شود
SDKنسخهٔ آزمایش‌شده
pusher-js (browser)8.6.0
pusher/pusher-php-server7.3.0
pusher (Node.js)5.3.4
pusher (Python)3.3.4
pusher-http-gov5.1.1
pusher (Ruby)2.1.1
laravel/framework (Echo)^13.0

چه چیزی عوض می‌شود

هاست، و کلیدها

کتابخانهٔ pusher-js تا وقتی wsHost ندهید ws-<کلاستر>.pusher.com را ثابت در خودش دارد، و کتابخانه‌های سرور تا وقتی هاست ندهید به api-<کلاستر>.pusher.com می‌روند. کل مهاجرت یعنی همین دو را بازنویسی کنید.

src/realtime.tsunified diff
const pusher = new Pusher(APP_KEY, {
- cluster: 'eu',
+ wsHost: 'ws-eu1.pushcaster.io',
+ wsPort: 443,
+ forceTLS: true,
})

تغییر کامل، به تفکیک زبان

client.js
js
// before — talking to Pushernew Pusher(KEY, { cluster: 'eu' })// after — talking to PushCaster (the key & secret are new)new Pusher(KEY, {  wsHost: 'ws-eu1.pushcaster.io',  wsPort: 443,  forceTLS: true,})

تنظیم‌نکردن هاست راحت از قلم می‌افتد. اگر روی مقدار پیش‌فرض بماند، کتابخانه با سرورهای Pusher حرف می‌زند، و خطا از کلید نادرست می‌گوید نه از مقصد اشتباه.

app id، key و سکرت تازه‌اند. کلیدهای قبلی منتقل نمی‌شوند. همان موقع یک کلاستر هم انتخاب کنید — بخشی از هاست است.

تفاوت‌های شناخته‌شده

سه چیز که یکسان نیستند

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

  • یک کلاستر، بدون فدراسیون

    کلاستر یک مرز ایزولاسیون است، نه یک راهنمای جغرافیایی: نودها، NATS و Redis مخصوص خودش، و هیچ تحویلی بین کلاسترها. هر اپلیکیشن دقیقاً در یکی زندگی می‌کند، پس دو اپلیکیشنی که باید با هم حرف بزنند باید در یک کلاستر باشند.

  • هاست همان نام کلاستر نیست

    ‏cluster: "eu" به‌تنهایی به PushCaster نمی‌رسد. باید wsHost را روی کلاینت و host را روی کتابخانهٔ سرور تنظیم کنید. یک ویرایش سه‌گزینه‌ای است و هر مهاجرتی آن را انجام می‌دهد.

  • ‏API آمار نداریم

    اندپوینت آمار داشبورد پوشر اینجا معادلی ندارد. مصرف از API خودمان می‌آید و متریک‌های عملیاتی از Prometheus. هیچ SDK رسمی سروری آن اندپوینت را صدا نمی‌زند، پس این روی ابزار خودتان اثر دارد نه روی اپلیکیشن.

مهاجرت

اول کانال‌های private و presence را امتحان کنید

کانال‌های public وقتی چیزی خراب است هم قبول می‌شوند — چون هیچ چیزی از سرور شما نمی‌پرسند. هاست کهنه یا سکرت ناجور فقط سر اشتراک‌های private و presence خودش را نشان می‌دهد.

  1. 01اپلیکیشن را بسازیدکلاستری که انتخاب می‌کنید بخشی از هر هاستی است که می‌خواهید تنظیم کنید.
  2. 02هاست را در هر دو جا تنظیم کنیدکلاینت به wsHost نیاز دارد، سرور به هاست. یکی را جا بیندازید و نیمی از اپلیکیشنتان همچنان با Pusher حرف می‌زند.
  3. 03کلیدها را عوض کنیدهر سه با هم عوض می‌شوند. کلید تازه با سکرت قدیمی فقط روی اشتراک‌های امضاشده شکست می‌خورد — و برای همین از یک تست سرسری جان سالم به در می‌برد.
  4. 04به یک کانال از نوع private مشترک شویداین POST /pusher/auth را به کار می‌اندازد و ثابت می‌کند secret با app id جفت است.
  5. 05به یک کانال از نوع presence بپیوندیدفهرست اعضا و رویدادهای ورود و خروج را تأیید می‌کند.
  6. 06از سرور منتشر کنیدهاست انتشار و امضا را سرتاسر تأیید می‌کند.

یک اپلیکیشن بسازید و یک کلاینت را به آن نشانه بگیرید.

Pusher علامت تجاری صاحب آن است. PushCaster سرویسی مستقل است و وابسته به Pusher نیست و مورد تأیید آن قرار نگرفته. نام کتابخانه‌ها صرفاً برای توصیف به کار رفته‌اند.

Support