Centrifugal یک سرور Real-time قدرتمند و متنباز است که برای مدیریت WebSocket، نوتیفیکیشن لحظهای، چت، Presence و انتقال داده بلادرنگ در پروژههای مدرن استفاده میشود. این ابزار بهخصوص در کنار Django، Node.js و معماریهای مقیاسپذیر، انتخابی حرفهای برای ساخت اپلیکیشنهای Real-time است.
Centrifugal چیست؟ Centrifugal یک سرور متنباز، سریع و تخصصی برای ارتباطات بلادرنگ است که برای مدیریت اتصالهای زنده بین سرور و کلاینت طراحی شده است. به زبان ساده، Centrifugal به شما کمک میکند بدون اینکه کل منطق WebSocket و Real-time را از صفر بسازید، یک زیرساخت حرفهای برای ارسال لحظهای پیام، رویداد و وضعیت ایجاد کنید. Centrifugal معمولا در معماریهایی استفاده میشود که در آنها موارد زیر اهمیت دارند:
Centrifugal مسئلهی انتقال سریع و قابلاعتماد رویدادها را حل میکند.
در این مدل، بکاند فقط یک رویداد یا پیام را روی یک channel منتشر (publish) میکند و هر کلاینتی که آن کانال را دنبال میکند، همان پیام را دریافت میکند. این الگو باعث میشود لازم نباشد سرور برای هر کاربر جداگانه منطق ارسال بنویسد؛ یکبار publish میکنی و Centrifugal خودش پیام را به همهی subscriberها میرساند. برای سناریوهایی مثل نوتیفیکیشن، چت، قیمت لحظهای، داشبورد زنده و آپدیت وضعیت بسیار مناسب است.
Presence یعنی بتوانی بفهمی چه کاربرانی همین الان به یک کانال وصل هستند یا در آن حضور دارند. این قابلیت برای نمایش وضعیت آنلاین بودن، تعداد کاربران حاضر، اعضای فعال یک room یا اینکه چه کسی الان در حال مشاهدهی یک بخش از سیستم است خیلی کاربردی است. مثلاً در چت میتوانی نشان بدهی چه کسانی داخل یک گفتگو هستند، یا در یک ابزار collaborative بفهمی چه کاربرانی همزمان روی یک صفحه کار میکنند.
با History میتوانی تعدادی از پیامها یا رویدادهای اخیر یک کانال را نگه داری تا اگر کاربری دیرتر وصل شد یا reconnect کرد، بتواند آخرین اتفاقات را بگیرد. این قابلیت کمک میکند کاربر فقط پیامهای جدید بعد از اتصال را نبیند، بلکه کمی از گذشتهی نزدیک کانال را هم داشته باشد. مثلاً در چت، کاربر میتواند چند پیام آخر را ببیند؛ یا در داشبورد زنده، آخرین stateها یا eventهای اخیر را از دست ندهد.
در دنیای واقعی، اتصال کلاینت همیشه پایدار نیست؛ اینترنت کاربر ممکن است قطع و وصل شود، اپ به پسزمینه برود یا شبکه تغییر کند. Centrifugal برای این شرایط طراحی شده و به کلاینت کمک میکند دوباره بهدرستی وصل شود، subscriptionها را بازیابی کند و تجربهی realtime را تا حد ممکن بدون دردسر نگه دارد. این یعنی لازم نیست تمام منطق reconnect و recovery را خودت از صفر بسازی؛ بخش زیادی از این پیچیدگی را ابزار برایت مدیریت میکند.
همهی کاربران نباید به همهی کانالها دسترسی داشته باشند؛ به همین دلیل Authentication یکی از بخشهای مهم Centrifugal است. معمولاً کلاینت با توکن یا مکانیزم امن دیگر احراز هویت میشود و بعد مشخص میشود به کدام کانالها حق اتصال یا subscribe دارد. این قابلیت برای حفاظت از دادهها ضروری است؛ مثلاً فقط صاحب یک حساب بتواند نوتیفیکیشنهای خودش را ببیند، یا فقط اعضای یک تیم به کانال خصوصی آن تیم وصل شوند.
وقتی تعداد connectionها زیاد میشود یا اپلیکیشن روی چند سرور اجرا میشود، مدیریت realtime خیلی سختتر از یک اتصال سادهی WebSocket میشود. Centrifugal برای این سناریوها ساخته شده و کمک میکند سیستم realtime را بهصورت مقیاسپذیر اجرا کنی؛ یعنی بتوانی با تعداد زیادی کاربر همزمان و چند instance از backend کار کنی. در نتیجه بهجای اینکه مدیریت connectionها، توزیع پیامها و هماهنگی بین سرورها را خودت پیادهسازی کنی، از یک معماری آماده و تستشده استفاده میکنی
چون بهجای اینکه WebSocket را بهصورت دستی روی بکاند اصلی مدیریت کنی، آن را به یک سرویس تخصصی میسپاری.
برای ارسال پیام لحظهای، وضعیت typing، seen، حضور آنلاین و گروهها.
برای نمایش اعلان فوری بدون نیاز به polling.
مثل مانیتورینگ سرور، سفارشها، تراکنشها و گزارشهای زنده.
برای price update، order book، order status و eventهای مالی.
مثل آنلاین/آفلاین بودن، progress، یا رویدادهای گروهی.
خودت باید همهچیز را بسازی:
اینها را بهصورت آماده یا استاندارد در اختیار تو میگذارد. پس Centrifugal فقط «یک ابزار ارسال پیام» نیست؛ بلکه یک زیرساخت Real-time است.
Centrifugal یک راهحل ساده برای ارسال چند پیام لحظهای نیست؛ بلکه یک زیرساخت حرفهای Real-time برای پروژههایی است که نیاز دارند دادهها را بدون تأخیر به کلاینتها برسانند.