وبسوکت بهعنوان سرویس
پلتفرم بلادرنگ مدیریتشده پشت چت و دادههای زنده foony.com، در دسترس همه توسعهدهندهها در foony.io.
یک سرویس وبسوکت یک اتصال پایدار بین سرورهای تو و هر کلاینت متصل باز نگه میدارد، پس آپدیتها همان لحظهای که اتفاق میافتند میرسند، نه با رفرش بعدی صفحه. Foony Realtime بخشهای زحمتکش را برایت انجام میدهد: اتصالها، اتصالهای مجدد، پخش، حضور و تاریخچه پیام، همه پشت یک SDK کوچک.
زنده امتحانش کن
همه چیزهای پایین همین الان روی سرویس اصلی در realtime.foony.io اجرا میشوند. این صفحه را در یک تب دوم باز کن و ببین چطور آن دو تا هم را آینه میکنند.
حضور و نشانگرهای زنده
هر کسی که این صفحه را میخواند اینجا ظاهر میشود، مستقیم از حضور کانال. موقعیت نشانگرها بهصورت پیامهای گذرا جابهجا میشوند، همان لایه کمتأخیری که کلاً از ذخیرهسازی رد میشود.
چت زنده
این چت واقعی این صفحه است، همان اتاق @foony/chat که هر صفحه و اتاق بازی Foony رویش اجرا میشود. پیامها روی یک کانال با تاریخچه میرسند، و ارسالها از سرور Foony میگذرند پس هر پیام مدیریت میشود.
اخیراً کسی چیزی نگفته. تو یخ را بشکن.
همگامسازی دیتابیس
این پایپلاین واقعی foony.com است: هر نام کاربری Foony را تایپ کن تا ردیف عمومی Postgres آنها از طریق WebSocket سایت استریم شود، و بعد همانطور که بازی میکنند زنده بهروز بماند. نه polling، نه اندپوینت API.
در حال جستوجو…
چرا تیمها WebSocket را میخرند بهجای اینکه خودشان بسازند
- اتصال مجددی که پیامها را از دست نمیدهد. مرورگرها مدام اتصال را قطع میکنند. کلاینتها با پخش مجدد تاریخچه از همانجا که مانده بودند ادامه میدهند، پس یک اتصال ناپایدار به معنای پیامهای ازدسترفته نیست.
- پخش گسترده در مقیاس بزرگ. رساندن یک پیام به صدهزار مشترک در کمتر از یک ثانیه یک مسئله سخت سیستمهای توزیعشده است. اینجا، این کل کار است.
- حضور بدون دفترداری. ببین همین الان چه کسانی آنلاین هستند و به رویدادهای ورود، بهروزرسانی و خروج واکنش نشان بده، بدون اینکه منطق heartbeat و timeout خودت را بنویسی.
- بدون برنامهریزی ظرفیت. سرورهای WebSocket حالتدار هستند، پس مقیاسدهی خودشان یعنی draining و sharding و مسیریابی sticky. یک سرویس مدیریتشده این را دردسر یک نفر دیگر میکند.
با Foony Realtime چه چیزی به دست میآوری
کانالها و pub/sub
رویدادهای نامدار را از طریق WebSocket یا REST به کانالهای محدود به اپ (مثل chat:lobby) با معناشناسی تحویل قابلپیشبینی پخش کن.
حضور
ردیابی کن چه کسی آنلاین است، عضویت را بهطور خودکار تازه کن و به رویدادهای ورود، بهروزرسانی و خروج واکنش نشان بده.
تاریخچه پیام
پیامهای اخیر را از ذخیرهسازی پایدار پخش مجدد کن تا کلاینتها بعد از اتصال مجدد بهطور تمیز بازیابی شوند.
احراز هویت با توکن
توکنهای کلاینت کوتاهعمر را از بکاند خودت با دسترسیهای سطح کانال برای انتشار، اشتراک، حضور و تاریخچه بساز.
سازگار با Pusher
پروتکل Pusher را میفهمد، پس اپهای pusher-js و Laravel Echo با یک تغییر پیکربندی وصل میشوند، نه با بازنویسی.
همگامسازی دیتابیس
تغییرات Postgres را مستقیم بهعنوان کوئریهای زنده به کلاینتهای مشترک استریم کن، بدون polling و بدون کد چسبی.
کل یکپارچهسازی چند خط است:
const realtime = new Realtime({ authCallback });
const channel = realtime.channels.get('chat:lobby');
channel.on((message) => {
showMessage(message.data);
});
await channel.publish('message', { text: 'hello' });
await channel.presence.enter({ name: 'Acorn' });در بازیهای واقعی آزموده شده
Foony برای چت و بهروزرسانیهای دیتابیس بلادرنگ بهطور گسترده از Foony Realtime استفاده میکند. حدود ۱.۵ میلیون بازیکن در ماه برای تقریباً ۵۰۰ میلیون پیام به foony.io تکیه میکنند، و یک بازی چندنفره فقط وقتی درست حس میشود که آن پیامها سریع، بهترتیب و دقیقاً یکبار برسند. Foony بدون قابلیت اطمینان و مقرونبهصرفهبودن foony.io ممکن نبود.
در هر کدام از بازیهای ما آن را در عمل ببین، بعد همان زیرساخت را با یک داشبورد و یک SDK در foony.io بگیر.

روی ترافیک خودت امتحانش کن
پلن رایگان شامل ۹ میلیون پیام در ماه است. نیازی به کارت اعتباری نیست.
سؤالات پرتکرار
WebSockets بهعنوان سرویس چیست؟
یک پلتفرم مدیریتشده که مالک اتصالات پایدار بین اپت و کاربرانش است. بهجای اجرای سرورهای WebSocket خودت، کلاینتهایت به سرویس وصل میشوند، بکاندت از طریق یک SDK یا REST پیامها را به کانالها منتشر میکند، و سرویس تحویل، اتصال مجدد، حضور و تاریخچه را مدیریت میکند.
Foony Realtime چه فرقی با Pusher یا Ably دارد؟
همان سطح اصلی کانالها، حضور، تاریخچه و احراز هویت با توکن را پوشش میدهد، و پروتکل Pusher را میفهمد، پس بهعنوان یک جایگزین آمادهبهکار برای Pusher کار میکند. تفاوت در خاستگاه و قیمت است. این برای foony.com، سایت بازی چندنفره خودمان، ساخته شده و پلن رایگان شامل ۹ میلیون پیام در ماه است.
برای جابهجایی باید اپم را از نو بنویسم؟
معمولاً نه. اپهای pusher-js و Laravel Echo با یک تغییر در پیکربندی میتوانند به Foony Realtime وصل شوند. پروژههای جدید از @foony/realtime SDK برای JavaScript و TypeScript، Go SDK، یا REST API از هر زبانی استفاده میکنند.
چقدر هزینه دارد؟
پلن رایگان شامل ۹ میلیون پیام در ماه است. پلنهای پولی ظرفیت ماهانه اضافه میکنند، و مصرف بالاتر از پلنت بهازای هر میلیون پیام محاسبه میشود. اعداد فعلی در foony.io/pricing.