Pusher: سرویس میزبانی برای ارتباط دوطرفه real-time، ارائه زیرساخت برای کانالها، رویدادها و اعلانهای webhook. این سرویس توسعهدهنده را از نیاز به راهاندازی سرور WebSocket خود بینیاز میکند و تحویل پیامها به میلیونها دستگاه را تضمین میکند. طبق مستندات رسمی Pusher (2025)، این سرویس ماهانه بیش از 40 میلیارد پیام را در سراسر جهان پردازش میکند.
نکات اصلی
Pusher — سرویس ابری برای ارتباط دوطرفه real-time است که در سال 2011 تأسیس شد. این سرویس زیرساخت آماده برای ارسال و دریافت پیامها در زمان واقعی بدون نیاز به مدیریت سرور WebSocket خود فراهم میکند. Pusher برای ساخت چتها، اعلانهای زنده، ویرایش مشترک و جدولهای امتیازات بازی استفاده میشود.
برخلاف کتابخانههایی مانند Socket.IO که نیاز به راهاندازی و نگهداری سرور شخصی دارند، Pusher بر اساس مدل SaaS (Software as a Service) کار میکند. توسعهدهنده ثبتنام میکند، کلیدها (app_id, key, secret) دریافت میکند و از REST API Pusher برای انتشار رویدادها استفاده میکند. زیرساخت سرور کاملاً توسط پلتفرم Pusher مدیریت میشود.
طبق وبلاگ رسمی Pusher (2025)، این پلتفرم بیش از 250,000 پروژه فعال در سراسر جهان را پشتیبانی میکند. از جمله مشتریان معروف میتوان به GitHub (اعلانهای زمان واقعی)، Trello (همگامسازی تابلوها) و Intercom (چت پشتیبانی) اشاره کرد. Pusher مراکز داده در ایالات متحده، اروپا و آسیا برای حداقل تأخیر پشتیبانی میکند.
Pusher در سال 2011 به عنوان یکی از اولین سرویسهای میزبانی برای WebSocket راهاندازی شد. در سال 2014، شرکت Pusher Channels را معرفی کرد — معماری فعلی با پشتیبانی از کانالهای private و presence. در سال 2017، پشتیبانی از webhook برای رویدادهای سمت سرور اضافه شد. در سال 2022، Pusher سرویس Pusher Beams را راهاندازی کرد — سرویس اعلانهای push برای پلتفرمهای موبایل.
معماری Pusher با راهحلهای self-hosted تفاوت دارد زیرا تمام پردازش اشتراکها، مدیریت اتصالات و مسیریابی رویدادها در سمت Pusher Cloud انجام میشود. توسعهدهنده فقط احراز هویت کانالهای private را از طریق backend خود مدیریت میکند.
معماری Pusher بر اساس مدل Publisher-Subscriber است. برنامههای سرور رویدادها را از طریق REST API Pusher منتشر میکنند و برنامههای کلاینت آنها را از طریق اتصال دائمی WebSocket دریافت میکنند. Pusher به عنوان واسطه بین ناشران و مشترکان عمل میکند.
وقتی سرور یک رویداد را از طریق درخواست POST به API Pusher ارسال میکند، پلتفرم کانال هدف را تعیین کرده و پیام را به همه کلاینتهای مشترک در آن کانال پخش میکند. کلاینتها رویداد را از طریق اتصال WebSocket که از قبل باز شده است دریافت میکنند که تأخیر 50–100 میلیثانیه را بسته به موقعیت جغرافیایی تضمین میکند.
هر کلاینت از طریق Pusher Client SDK اتصال برقرار میکند که به طور خودکار حملونقل را انتخاب میکند (WebSocket — اولویت، HTTP long-polling — fallback). SDK بدون دخالت توسعهدهنده، اتصال مجدد، سریالسازی دادهها و مدیریت خطاها را انجام میدهد. طبق مستندات فنی Pusher (2025)، زمان اتصال مجدد در هنگام قطع شبکه کمتر از 1 ثانیه است.
سیستم از سه جزء تشکیل شده است: Pusher Server API (نقاط پایانی REST برای انتشار رویدادها)، Pusher Client SDK (کتابخانهها برای اشتراک رویدادها) و Pusher WebHook (اعلانهای سرور درباره رویدادهای اتصال/قطع اتصال). همه اجزا به صورت ناهمزمان و مستقل کار میکنند.
Pusher Channels از سه نوع کانال پشتیبانی میکند که هر کدام برای سناریوهای استفاده متفاوتی طراحی شدهاند. انتخاب نوع کانال سطح دسترسی، مکانیسم احراز هویت و قابلیتهای موجود را تعیین میکند.
| نوع کانال | پیشوند | احراز هویت | کاربرد |
|---|---|---|---|
| Public | channel- | نیاز نیست | دادههای عمومی: نرخ ارز، آب و هوا، خوراک خبری |
| Private | private- | امضای درخواست در سرور | اعلانهای شخصی، چتها، دادههای کاربر |
| Presence | presence- | امضا + اطلاعات کاربر | وضعیت آنلاین، اتاقهای بازی، ویرایش مشترک |
کانالهای Public بدون احراز هویت برای همه کلاینتها در دسترس هستند و برای دادههای پخشی مناسباند. کانالهای Private نیاز به احراز هویت از طریق سرور توسعهدهنده دارند: کلاینت درخواستی به backend خود با socket_id و channel_name ارسال میکند، سرور درخواست را با کلید مخفی Pusher امضا کرده و یک توکن auth برمیگرداند. کانالهای Presence علاوه بر این اطلاعات کاربر (user_id, user_info) را منتقل کرده و امکان ردیابی آنلاین بودن را فراهم میکنند.
طبق مستندات Pusher (2025)، حداکثر تعداد کلاینتهای همزمان متصل به یک کانال برای کانالهای public و private 10,000 است. برای کانالهای presence محدودیت 10,000 کاربر در هر کانال با پشتیبانی تا 100,000 کاربر در هر برنامه است.
مدل رویدادهای Pusher بر اساس رویدادهای نامگذاری شده است که در یک کانال منتشر میشوند. هر رویداد دارای یک نام (حداکثر 200 کاراکتر)، داده در قالب JSON و socket_id اختیاری برای جلوگیری از ارسال مجدد به آغازگر رویداد است.
تریگرها — درخواستهای HTTP POST به API Pusher هستند که یک رویداد را در یک کانال منتشر میکنند. قالب درخواست: POST /apps/{app_id}/events با بدنه شامل channel، name و data. Pusher Server API از تریگرها از هر محیط سروری از طریق کتابخانههای رسمی (PHP, Ruby, Python, Go, Java, Node.js) پشتیبانی میکند.
Pusher از تریگرهای دستهای (batch) پشتیبانی میکند — انتشار یک رویداد در چندین کانال با یک درخواست. این کار از فراخوانیهای متوالی کارآمدتر است و اتمی بودن تحویل را تضمین میکند. طبق تستهای عملکرد Pusher (2024)، تریگر دستهای روی 100 کانال 30–50 میلیثانیه طول میکشد، در حالی که فراخوانیهای متوالی 2–5 ثانیه طول میکشند.
Pusher WebHook به سرور شما امکان دریافت اعلانهایی درباره رویدادهای زیرساخت را میدهد: اتصال کلاینت، قطع اتصال، وقوع خطا. درخواستهای Webhook برای تأیید با HMAC-SHA256 امضا میشوند. این برای ثبت رویداد، تحلیل و همگامسازی وضعیت حیاتی است.
یکپارچهسازی Pusher از دو بخش تشکیل شده است: سمت سرور (انتشار رویدادها) و سمت کلاینت (اشتراک رویدادها). بیایید مثال Node.js برای بخش سرور و JavaScript برای بخش کلاینت را بررسی کنیم. برای شروع باید یک برنامه در داشبورد Pusher ایجاد کرده و اعتبارنامه دریافت کنید.
طبق مستندات Pusher (2025)، طرح پایه (Sandbox) شامل حداکثر 100 اتصال همزمان و 200,000 پیام در روز است — برای توسعه و آزمایش کافی است. طرحهای تولیدی از $49 در ماه برای 1000 اتصال شروع میشوند.
const Pusher = require('pusher');
const pusher = new Pusher({
appId: 'YOUR_APP_ID',
key: 'YOUR_KEY',
secret: 'YOUR_SECRET',
cluster: 'eu',
useTLS: true
});
pusher.trigger('my-channel', 'my-event', {
message: 'Hello from server',
timestamp: Date.now()
}).then(() => {
console.log('رویداد منتشر شد');
}).catch(console.error);
import Pusher from 'pusher-js';
const pusher = new Pusher('YOUR_KEY', {
cluster: 'eu',
forceTLS: true
});
const channel = pusher.subscribe('my-channel');
channel.bind('my-event', (data) => {
console.log('رویداد دریافت شده:', data);
displayNotification(data.message);
});
Pusher SDK ارائه میدهد برای iOS (Swift) و Android (Java/Kotlin) که عملکرد کلاینت JavaScript را کاملاً تکرار میکنند. SDKهای موبایل همان انواع کانال، مکانیسم احراز هویت و مدل رویداد را پشتیبانی میکنند. برای React Native بسته pusher-js موجود است که از طریق پل JavaScript کار میکند.
در دستگاههای موبایل، Pusher SDK به طور خودکار جابجایی بین Wi-Fi و شبکه موبایل را با استفاده از مکانیسم اتصال مجدد با تأخیر نمایی مدیریت میکند. این به ویژه برای برنامههای iOS مهم است، جایی که iOS ممکن است اتصالات WebSocket را در هنگام کار در پسزمینه به اجبار ببندد.
طبق وبلاگ فنی Pusher (2024)، میانگین مصرف ترافیک یک اتصال Pusher در دقیقه 1–2 KB در صورت عدم وجود رویدادهای فعال است. این با استفاده از پروتکل heartbeat بهینهسازی شده با فاصله 30 ثانیه به دست میآید. یک برنامه با اندازه متوسط میتواند تا 1000 اتصال همزمان Pusher را بدون تأثیر قابل توجه بر مصرف باتری پشتیبانی کند.
Pusher Beams — سرویس اضافی برای ارسال اعلانهای push به دستگاههای موبایل از طریق APNs (iOS) و FCM (Android). Beams با Pusher Channels یکپارچه میشود: یک رویداد از کانال میتواند به طور خودکار یک اعلان push را اگر کلاینت آفلاین باشد، تریگر کند. این مشکل تحویل پیامها را در هنگام بسته بودن برنامه حل میکند.
امنیت Pusher در چندین سطح پیادهسازی شده است. هر درخواست به Pusher API با استفاده از app_secret با HMAC-SHA256 امضا میشود. این تضمین میکند که فقط سرور مجاز میتواند رویدادها را منتشر کند. SDKهای کلاینت از app_key برای شناسایی برنامه استفاده میکنند، اما برای دسترسی به کانالهای private و presence احراز هویت اضافی لازم است.
احراز هویت کانالهای private در سه مرحله انجام میشود: کلاینت pusher.subscribe('private-channel') را فراخوانی میکند، Pusher Client SDK یک درخواست HTTP به نقطه پایانی backend شما (/pusher/auth) ارسال میکند، سرور حقوق کاربر را بررسی کرده و یک توکن auth امضا شده با کلید مخفی برمیگرداند. Pusher امضا را تأیید کرده و اشتراک را مجاز میکند.
توصیه میشود از اتصالات TLS برای همه درخواستها استفاده کنید (تنظیم useTLS: true در SDK). Pusher همچنین محدودیت دسترسی بر اساس آدرس IP برای درخواستهای سرور به REST API را پشتیبانی میکند. برای تعرفههای enterprise، پشتیبانی از VPC (Virtual Private Cloud) و کلاسترهای اختصاصی با زیرساخت ایزوله در دسترس است.
سوالات متداول
Pusher — یک سرویس میزبانی (SaaS) است که نیاز به مدیریت سرور ندارد. Socket.IO — کتابخانهای است که باید خودتان آن را راهاندازی کنید. Pusher در راهاندازی سادهتر اما در مقیاسدهی گرانتر است، Socket.IO نیاز به کار DevOps دارد اما در حجم بالا ارزانتر است.
طرح رایگان Sandbox شامل 100 اتصال و 200,000 پیام در روز است. طرحهای تولیدی از $49/ماه (1000 اتصال، پیام نامحدود) تا enterprise با شرایط فردی شروع میشوند.
Pusher از WebSocket با fallback خودکار به HTTP long-polling استفاده میکند. برای پیامهای حیاتی، یک صف در سمت Pusher با تضمین تحویل حداقل یک بار (at-least-once) در دسترس است.
بله، Pusher از روسیه از طریق خوشه اروپایی (eu) قابل دسترسی است. تأخیر برای مراکز داده اروپایی 50–100 میلیثانیه است. برای پروژههایی با الزامات محلیسازی داده، توصیه میشود جایگزینها را در نظر بگیرید.
رقبای اصلی — Ably (عملکرد مشابه، تعرفههای انعطافپذیرتر)، PubNub (شبکه تحویل جهانی)، Socket.IO (self-hosted) و Firebase Realtime Database (اکوسیستم Google).
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید