معرفی سرویس بلادرنگ (Realtime)
سرویس بلادرنگ (Realtime) به شما امکان ساخت بازیها و اپلیکیشنهای آنلاین که نیاز به تعامل بلادرنگ را دارند میدهد. نمونهای از کاربردهای این سرویس عبارتند از:
- اپلیکیشن چت ساده و یا پیچیده در سطح Telegram
- اپلیکیشن/وبسایت بازار بورس
- بازیهای آنلاین دو یا چندنفره
خصوصیت این اپلیکیشنها و وبسایت این است که نیاز به یک تعامل زنده بین دو یا چند کاربر وجود دارد. منظور از تعامل زنده همان بلادرنگ است، یعنی اتفاقات بدون کمترین تاخیر زمانی به دست کاربران دیگر برسد. برای مثال در یک اپلیکیشن چت شما نیاز دارید که پیام شما حداکثر نیمثانیه بعد به دست همه افرادی که در گروه چت عضو هستند رسیده باشد. در موارد حساستر مانند بازی چندنفره آنلاین این زمان باید به کمتر از ۱۰۰ میلیثانیه برسد. این الزام زمانی سختگیرانه سبب میشود که راهکارهای معمولی اتصال به سرور کارکرد مناسب را نداشته باشد و نیاز به استفاده از تکنیکهای بلادرنگ باشد.
در سرویسهای بلادرنگ رایج، مانند سرویس بلادرنگ بکتوری، کلاینت (گوشی موبایل یا وبسایت شما در مرورگر کاربر) یک اتصال دائمی به سرور ایجاد میکند. این اتصال تا زمانی که اختلالی در شبکه ایجاد نشود و یا کلاینت/سرور درخواست اتمام اتصال را ندهند برقرار است و به محض اینکه رویدادی در هر یک از دو سمت کلاینت/سرور روی دهد، پیامی مبنی بر این رویداد بر روی ارتباط باز موجود نوشته خواهد شد و به دست طرف دیگر خواهد رسید.
جریان کاری بلادرنگ
برای مثال در یک اپلیکیشن چت دو نفره در سادهترین حالت فرآیند زیر اتفاق میافتد:
- کاربر ۱ درخواست اتصال به سرور میدهد و یک کانال دوطرفه بین سرور و کاربر ۱ برقرار میشود
- کاربر ۲ درخواست اتصال به سرور میدهد و یک کانال دوطرفه بین سرور و کاربر ۲ برقرار میشود
- کاربر ۱ به کاربر دو پیام سلام میدهد، در این حالت اپلیکیشن کاربر ۱ بر روی کانال خود به سرور این پیام را اعلام میکند
- سرور با پردازش پیام متوجه میشود که مقصد پیام کاربر ۲ است
- سرور به بدنه پیام، فرستنده (کاربر ۱) را اضافه میکند
- سرور بر روی کانال خود و کاربر ۲، پیام کاربر ۱ را ارسال میکند
- اپلیکیشن کاربر ۲، پیام را دریافت کرده و از روی فرستنده تشخیص میدهد که پیام از کاربر ۱ است
- اپلیکیشن کاربر ۲، پیام را به نام کاربر ۱ در واسط گرافیکی نمایش میدهد
خواص کانال دوطرفه
ممکن است برای شما سوال ایجاد شود که وجود یک کانال دوطرفه چه مزیتی دارد. جواب کوتاه به این سوال آن است که، بدون وجود کانال دوطرفه نوشتن اپلیکیشنی مانند چت تقریبا غیرممکن است. خصوصیت این کانال که باعث میشود وجود آن برای اپلیکیشنهای از این دست مناسب باشد عبارتند از:
- کاربر ۱ هر بار که قصد ارسال پیام دارد، نیاز نیست از اول یک ارتباط به سرور برقرار کند، این خصیصه باعث میشود پیام دو تا سه برابر سریعتر به دست سرور برسد.
- در صورتی که سرور کانالی به کاربر ۲ نداشته باشد، به هیچ وجه نمیتواند به کاربر ۲ پیام را برساند، مگر اینکه کاربر ۲ به صورت مداوم سرور را چک کند،.
- در صورتی که کاربر ۲ مداوم (مثلا هر نیم ثانیه) وجود پیام در سرور را چک کند، منابع زیادی از گوشی موبایل و سرور مصرف خواهد کرد که به صرفه نیست. همچنین ماهیت بلادرنگ به تاخیر نیم ثانیه تبدیل میشود.
تکنولوژیها
سرویس بلادرنگ بکتوری برای کانال دوطرفه از بستر Websocket استفاده میکند. این استاندارد ابتدا در وب ایجاد شد و در حال حاضر، در اپلیکیشنها هم کاربرد دارد. همچنین متن پیامها بر اساس پروتوکل STOMP میباشد. این پروتوکل از پروتوکل معروف HTTP الهام گرفته شده است که در صورتی که تجربه کار با سرور داشته باشید قطعا با آن آشنایی دارید. پروتوکل STOMP متنی است و باینری نیست و مانند Http هر درخواست آن دارای یک متد، یک آدرس مقصد، تعدادی هدر و یک بدنه اصلی است. شما برای استفاده از این سرویس نیازی به دانستن جزییات این تکنولوژیها ندارید و این لینکها صرفا برای مطالعه بیشتر، در صورت تمایل، آورده شده است.
مهم: سرورهای بکتوری یک پیام عادی شما را در زمانی بین ۲ تا ۱۵ میلیثانیه جابهجا میکنند، یعنی از زمانی که پیام بر روی کانال دوطرفه اول به دست سرور بکتوری برسد تا زمانی که پیام بر روی کانال دوطرفه مقصد نوشته شود بسته به شرایط مختلف زمانی بین ۲ تا ۱۵ میلیثانیه خواهد برد. دقت کنید که دو کاربر شما احتمالا بر روی اینترنت خانگی و یا موبایل هستند. بنابراین زمان انتقال پیام شامل رسیدن پیام از کاربر ۱ به سرور و از سرور به کاربر ۲ نیز خواهد شد که در بهترین اینترنتهای خانگی مجموع این دو زمان حدود ۵۰ میلیثانیه خواهد بود. پس شما باید حداقل بر روی ۵۲ تا ۶۵ میلیثانیه برای رسیدن پیام از کاربر اول به دوم حساب کنید. در اینترنتهای کندتر این زمان میتواند بسیار بیشتر شود که متاسفانه مشکلی اجتنابناپذیر است.
نتیجهگیری
در صورتی که ماهیت اپلیکیشن و یا وبسایت شما شبیه اپلیکیشنهای چت، بازار بورس و یا بازیهای آنلاین است و نیاز به انتقال تعداد بسیار زیادی پیام به صورت دو طرفه (از کلاینت به سرور و برعکس) دارید سرویس بلادرنگ بکتوری راهکاری مناسب برای شماست و بایستی از آن استفاده کنید.
در صورتی که هیچ یک از موارد گفته شده در مورد اپلیکیشن شما صادق نیست و آنلاین بودن کاربر در آن معنایی ندارد، نیازی به استفاده از این سرویس نخواهید داشت.