مکانیزم کاری وبسوکت به چه صورتی است؟
وبسوکت با استفاده از یک اتصال TCP به سرور متصل میشود و یک خط ارتباطی مطمئن برای انتقال دادهها در اختیار برنامههای وبمحور قرار میدهد. این اتصال دائمی و بدون وقفه است و تفاوت آن با HTTP در این است که در HTTPبرای هر درخواست یک اتصال جدید برقرار میشود. هنگامی که ارتباط وبسوکت بین مرورگر و سرور برقرار میشود، مرورگر یک درخواست دستدهی(Handshaking) به سرور ارسال میکند. این دستدهی شامل یک سرآیند است که یک کلید رمزنگاری دارد. سرور پس از دریافت درخواست، یک پاسخ دستدهی ارسال میکند که شامل یک کلید رمزنگاری است. سپس، مرورگر و سرور از این کلیدها برای رمزنگاری و رمزگشایی دادههای ارسالی و دریافتی استفاده میکنند.
پس از برقراری اتصال، وبسوکت از پروتکل Message-oriented استفاده میکند. بهعنوان مثال، در وبسوکت پیام بهشکل یک فریم ارسال میشود. این فریم شامل اطلاعاتی مانند نوع پیام، طول پیام و دادههای آن است. سپس، سرور این فریم را دریافت و پردازش میکند.
با توجه به اینکه وبسوکت یک اتصال دائمی و بدون وقفه ایجاد میکند، نیازی به ارسال درخواستهای مکرر برای سرور نیست که کاهش ترافیک و تاخیر در ارسال و دریافت دادهها را بههمراه دارد. همچنین، وبسوکت به توسعهدهندگان اجازه میدهد دادههای زنده مانند ویدئو و صدا را بهصورت پویا در برنامههای وب پخش کنند. برای استفاده از وبسوکت برنامهنویسان باید از واسط برنامهنویسی مربوط به وبسوکت استفاده کنند. با استفاده از این واسط برنامهنویسی کاربردی، برنامهنویسان میتوانند ارتباطی میان مرورگر و سرور برقرار کنند و دادههای خود را بهشکل پایدار انتقال دهند. همچنین، وبسوکت برای برنامهنویسان امکاناتی مثل ارسال پیامها بهشکل مستقیم، برقراری ارتباط بین چند کاربر و همگامسازی دادهها را بهوجود میآورد.
تحولی که وبسوکتها آفریدهاند
در روش سنتی ساخت برنامههای وبمحور، وقتی قرار است بین کلاینت و سرور ارتباط بلادرنگی بهوجود آید، یک کانال ارتباطی مبتنی بر HTTP ایجاد میشود که اجازه ارسال و دریافت و بهروزرسانیها و ارسال دادهها از طریق دستورات HTTP را بر مبنای تکنیک Pooling به سرور میدهد. این روش به لحاظ تئوری و عملی قابل اجرا است، اما چالشها و مشکلات مختلفی را بهوجود میآورد. از جمله این چالشها باید به برقراری ارتباط یک طرفه، قطعی در ارتباط، تاخیر در ارسال و دریافت اطلاعات و امنیت پایین اشاره کرد. در نقطه مقابل، پروتکل وبسوکت را داریم که اجازه میدهد یک ارتباط پایدار و با کمترین تاخیر را بهوجود آوریم. برای درک این موضوع که پروتکل وبسوکت چه مزایایی دارد، ابتدا بهتر است بدانیم روشهای سنتی به چه صورتی کار میکردند و چه مشکلاتی داشتند.
روشهای سنتی ساخت برنامههای حساس به زمان
فرض کنید توسعهدهنده وب اپلیکیشن در حال ساخت یک برنامه وبمحور بلادرنگ برای نمایش قیمت سهام است یا در حال ساخت یک برنامه پیامرسان یا برنامه خبری است و برای بهدست آوردن دادهها از سرور باید برای سرور از طریق پروتکل HTTP درخواستی ارسال کند. اطلاعاتی که توسط این پاسخ باید از طرف پروتکل HTTP به مقصد برسد و صفحه رندر شود، قدیمی میشوند. برای اینکه بتوان بهروزترین داده را به کاربر ارائه کرد، توسعهدهنده وب باید دائما برای سرور درخواست ارسال کند تا بتواند صفحه ارائه اطلاعات به کاربر را بهروز نگه دارد. بدیهی است که چنین روشی باعث میشود تا منابع سرور بهشکل قابل توجهی مصرف شوند تا برنامه وب بتواند اطلاعات موردنیاز کاربر را در اختیارش قرار دهد.
Polling
Polling یکی از اولین روشها برای حل مشکل بلادرنگ بودن برنامهها بود. در این روش، یک تقاضای HTTP با وقفههای منظم بهسمت وبسرور فرستاده میشود تا پاسخهای سریع دریافت کند. اگر با جاوااسکریپت آشنا هستید، میتوانید آنرا مثل تابع SetInterval تصور کنید، یعنی در هر T ثانیه برنامه درخواستی را ارسال میکند. برنامه درخواست خود را از طریق پروتکل HTTP ارسال و پاسخ را نیز به همین روش دریافت کرده و صفحه را نوسازی میکند.
مشکل بزرگی که روش فوق دارد در مورد دادههای بلادرنگ است. این موضوع که یک اتفاق چه زمانی رخ میدهد قابل پیشبینی نیست. از اینرو، توسعهدهنده مجبور است برنامه را بهگونهای بنویسد که تقاضاهای غیرضروری زیادی از طریق پروتکل HTTP برای سرور ارسال کند که افزایش بار شبکه را بههمراه دارد. متاسفانه هرچه تعداد کاربران برنامه بیشتر شود به همان نسبت تعداد تقاضاهای شبکه نیز افزایش پیدا میکنند که در نهایت منابع سرور را بیهوده هدر میدهند. فراموش نکنید که هر تقاضا سرآیند HTTP خود را حمل میکند که در بلندمدت کندی سرعت سرور را بههمراه خواهد داشت.
Long Polling
Long Polling با هدف برطرف کردن مشکل ارسال زیاد تقاضا از طرف پروتکل HTTP بهوجود آمد تا سرور بتواند پاسخها را با کمی تاخیر ارسال کند. به بیان دقیقتر، سرور تقاضا را برای مدت زمان مشخصی نگه میدارد که ممکن است در این بازه زمانی اتفاق غیرهمنتظرهای رخ دهد. البته، در این حالت، اگر اتفاقی رخ دهد پاسخ سریع ارسال میشود، در غیراینصورت یک پاسخ خالی ارسال میشود، به این معنی که اتفاق خاصی نیفتاده است. مشکلی که روش فوق دارد این است که وبسرور ممکن است تقاضاهای بعدی را که ممکن است بلافاصله پس از پاسخ خالی ارسال شوند نادیده بگیرد.
Comet
کامِت با هدف حل مشکل دو راهکار قبلی ابداع شد و مبتنی بر استریم است. در این روش برنامه کاربردی یک ارتباط HTTP را باز میکند و آنرا باز نگه میدارد تا وبسرور، دادهها را بهسمت مرورگر وب ارسال کند، بدون اینکه هیچگونه تقاضای واضح و روشنی برای دادههای مختلف ارسال شده باشد. در این حالت، نه سمت سرور و نه سمت کلاینت این اتصال را بهشکل مداوم نخواهند بست. با اینحال، مشکلی که روش فوق دارد این است که همچنان درخواست استریمینگ در پیامهای HTTP قرار میگیرد و بنابراین سرورهای پروکسی ممکن است پاسخها را بافر کنند که تاخیر در زمان تحویل پیام را بههمراه خواهد داشت.
HTML5 Websocket
HTML5 Websocket تمامی مشکلات فوق را برطرف کرد و با ایجاد یک کانال دو طرفه برای ارتباطات وب از سوکت لایه انتقال استفاده کرد که توضیحات نحوه عملکرد آن به تفضیل در پروتکل RFC 6455 وبسوکت تشریح شده است. پروتکل وبسوکت در ترکیب با WebSocket API جایگزینی برای HTTP Polling است و قادر است یک مسیر دوطرفه بهسمت وبسرور باز کند. با ساخت کانال ارتباطی دوطرفه دیگر نیازی به اکسپلویت HTTP از طریق مکانیزمهای polling، long polling یا Comet وجود نخواهد داشت. این راهکار باعث میشود تا فضای بیشتری برای ارسال و دریافت دادههای بلادرنگ بهوجود آید.
وبسوکت چه مزایایی در اختیار ما قرار میدهد؟
وبسوکت به برنامههای وب اجازه میدهد همواره با سرور در ارتباط باشند. همین مسئله باعث شده تا گزینه مناسبی برای انتقال دادههای زنده مانند ویدئو و صدا، پویایی در برنامههای وب، بازیهای چندنفره آنلاین و برقراری ارتباط بین برنامههای کاربردی مختلف باشد. برخی از مزایای کلیدی وبسوکت بهشرح زیر هستند:
- کاهش تعداد درخواستهای مجدد: با استفاده از وبسوکت، برنامهنویسان میتوانند با کمترین تاخیر دادهها را میان مرورگر و سرور انتقال دهند. در نتیجه تعداد درخواستهای مجدد برای دریافت دادهها به کمترین میزان ممکن میرسد.
- کاهش ترافیک شبکه: در پروتکل HTTP برای هر درخواست، یک اتصال جدید برقرار میشود، اما با استفاده از وبسوکت، نیازی به برقراری اتصال جدید برای هر درخواست نیست که کاهش ترافیک شبکه و کاهش تاخیر در ارسال و دریافت دادهها را بههمراه دارد.
- ارتباط دوطرفه: وبسوکت به برنامهنویسان اجازه میدهد دادهها را بهشکل دوطرفه میان مرورگر و سرور ارسال کنند، رویکردی که اجازه میدهد برنامههای کاربردی وب تعاملیتر و پویاتری ایجاد کنیم. در مقایسه با HTTP که قادر به برقراری ارتباط دوطرفه نیست و برای هر درخواست، پاسخی از سمت سرور دریافت میکند، وبسوکت بهصورت دوطرفه عمل میکند. به بیان دقیقتر، اگر سرور دادهای را به مرورگر ارسال کند، مرورگر میتواند بدون ارسال درخواست دوباره، پاسخ خود را به سرور ارسال کرده و دادههای جدید را دریافت کند. این قابلیت باعث میشود عملکرد و سرعت برنامههای وب بهبود یافته و تاخیر کم شود.
- پشتیبانی از ویژگی چنددامنهای: وبسوکت به توسعهدهندگان اجازه میدهد ارتباط بین برنامههای وب را از دامنههای مختلف برقرار کنند که این قابلیت برای پروژههای بزرگ و پیچیده مفید است.
- افزایش سرعت و کارایی برنامه: با استفاده از وبسوکت برنامهها میتوانند بهشکل بلادرنگ با کاربران ارتباط برقرار کنند و بهسرعت برای پاسخ به تغییرات و درخواستهای کاربران واکنش نشان دهند که نقش مهمی در بهبود عملکرد و سرعت برنامهها دارد.
- پشتیبانی از برنامههای چندگانه: وبسوکت اجازه میدهد برنامههایی را برای هماهنگی و همزمانسازی اطلاعات و ارسال دادههای بلادرنگ بین چند دستگاه یا برنامه توسعه داد. بهطور خاص، پشتیبانی از برنامههای چندگانه در وبسوکت به معنای این است که برنامهها بهشکل همزمان و بدون تاخیر از یک اتصال مشترک وبسوکت برای ارسال و دریافت دادهها استفاده میکنند.
- مدیریت و پشتیبانی دقیق از بارهای کاری بالا: با استفاده از وبسوکت، سرور میتواند برای پاسخ به طیف گستردهای از درخواستهای همزمان کاربران از یک اتصال مشترک وبسوکت استفاده کند که این قابلیت بهبود مدیریت و پشتیبانی از بارهای کاری بالا در سرور را بههمراه دارد.
کاربردهای فوقالعاده و حیرتانگیز وبسوکتها
در دنیای امروز مصرفکنندگان انتظار دارند تا برنامههای کاربردی سریع باشند و برنامهها در کوتاترین زمان ممکن اطلاعات را در اختیار آنها قرار دهند. به بیان دقیقتر، کاربران انتظار دارند تا اطلاعاتی را که دنبالشان هستند با لمس صفحه گوشی یا تبلت مشاهده کنند. به همین دلیل، برنامههای کاربردی باید توانایی نشان دادن اطلاعات بهشکل بلادرنگ را داشته باشند. از طرفی، در چند دهه گذشته به نسبت امروز شاهد رشد روزافزون تجهیزات متصل به اینترنت نبودهایم که قابلیت برقراری ارتباط بلادرنگ با کاربران و سرورها را دارند.
همچنین، انتظار میرود تا چند سال دیگر طیف گستردهای از تجهیزات مصرفی قابلیت اتصال به اینترنت را داشته باشند. در تمامی این موارد، برنامههای کاربردی نصبشده روی تجهیزات مصرفی باید قابلیت ارسال و دریافت بلادرنگ اطلاعات را داشته باشند. متاسفانه حرکت بهسمت دنیای بدون درنگ کار سادهای نیست، زیرا چالشها و پیچیدگیهای مختلفی وجود دارد که باید برطرف شوند که از آن جمله باید به انتخاب نوع چارچوب، پروتکلهای قابل اعتماد شبکه، اطمینانپذیری و مقیاسپذیری اشاره کرد. اکنون، اجازه دهید برخی از کاربردهای فوقالعاده وبسوکت را مورد بررسی قرار دهیم.
1. کاهش مصرف منابع
با استفاده از وبسوکت، مصرف منابع سرور و مرورگر مثل حافظه و پردازنده کم میشود. بهطور مثال، در HTTP برای هر درخواست، یک اتصال جدید برقرار میشود که هدررفت منابع سرور را بههمراه دارد، اما با استفاده از وبسوکت نیازی به ساخت اتصال جدید برای هر درخواست نیست، بنابراین در مصرف منابع سرور و مرورگر صرفهجویی میشود.
2. امنیت بالا
وبسوکت از پروتکلهای SSL / TLS برای رمزنگاری دادههای ارسالی و دریافتی استفاده میکند که امنیت ارتباط میان مرورگر و سرور را افزایش میدهد.
3. فیدهای بلادرنگ
به برنامههای کاربردی اجازه میدهد از فیدهای بلادرنگ، نوتیفیکیشن، لایکها و اشتراگگذاریها به بهترین شکل پشتیبانی کنند و همچنین بتوانند در کمترین زمان ممکن همه اطلاعات را بهشکل بلادرنگ با کاربران به اشتراک قرار دهند.
4. بازیهای چندنفره آنلاین
WebSocket API به برنامهنویسان اجازه میدهد تا تجربهای با کمترین لگ ممکن از بازیهای آنلاین روی گوشیهای هوشمند یا کامپیوترهای شخصی داشه باشید. این قابلیت که در هر لحظهای بدون نیاز به ارسال چندباره درخواستها برای وبسرورها بتوانید دادهها را ارسال و دریافت کنید اجازه میدهد بازیهای آنلاین قدرتمندی بسازید.
5. ویرایش و ادیت مشارکتی بلادرنگ
بدون شک با گوگل داکس کار کرده و با آن آشنا هستید. با ظهور HTML5 WebSockets ساخت برنامههای مشارکتی رواج پیدا کرد و کاربران توانستند روی اسناد مشابه کار کنند.
6. مصورسازی دادههای بلادرنگ
مصورسازی دادههای بلادرنگ نقش مهمی در بازاریابی دیجیتال، ساخت گرافهای فروش، تحلیل دادهها بهشیوه بلادرنگ دارد. با استفاده از HTML5 WebSockets میتوانید نمایشهای بصری خیرهکنندهای برای دادهها ایجاد کنید و هر زمانی که دادههای جدید دریافت کردید، با صرف کمی وقت نموداردها را بهروزرسانی کنید.
7. چت چندرسانهای بلادرنگ
اگر توسعهدهنده اپلیکیشن هستید، حتما دوست دارید یک چت سرور بسازید. با HTML5 WeSockets میتوانید به این آرزوی قدیمی برسید.
8. اپلیکیشنهای یادگیری الکترونیکی
با HTML5 WebSockets قادر به ساخت برنامههای آموزش الکترونیکی واکنشگرا و تعاملمحور هستید که قادر هستند متناسب با عملی که کاربر انجام میدهد پاسخ مناسبی به او بدهند. امروزه، بخش عمدهای از برنامههای آموزشی ساختهشده برای سیستمعامل اندروید بر مبنای همین تکنیک کار میکنند.
9. اپلیکیشنهای مکانیابی بلادرنگ
ساخت اپلیکیشنهای مکانیابی آنلاین که امکان رهگیری موقعیت مکانی کاربران را میدهند و امروزه بسیاری از کاربران تحت عنوان ارسال لوکیشن از آن یاد میکنند، بر مبنای فناوری HTML5 WebSockets ساخته شدهاند. وبسوکت به توسعهدهندگان این امکان را میدهد تا بهروزرسانیهای مکانی را بهصورت بلادرنگ بهاشتراک بگذارند تا کاربران بتوانند از موقعیت یکدیگر آگاه شوند.
10. ورزشهای بلادرنگ / بهروزرسانی رویدادها
امروزه کاربران وابستگی زیادی به شبکههای اجتماعی پیدا کردهاند تا بتوانند در جریان جدیدترین اتفاقات قرار بگیرند. با استفاده از HTML5 WebSockets میتوانید یک پلتفرم عمومی را برای تمام کانالهایی که دارید ایجاد کنید تا بتوانید بهروزرسانیهای زنده را بهصورت بلادرنگ در برنامه قرار داده و به کاربران نشان دهید.
کلام آخر
در نهایت، ذکر این نکته ضروری است که برای استفاده از وبسوکت در برنامههای تحت وب، باید سرور و مرورگر از این پروتکل پشتیبانی کنند. بهطور مثال، برنامههای وبمحوری که از Node.js سمت سرور استفاده میکنند، بدون مشکل قادر به استفاده از وبسوکت هستند. همچنین، مرورگرها نیز به واسطه پشتیبانی از HTML5 بهشکل پیشفرض از وبسوکت پشتیبانی میکنند.
با این توصیف باید بگوییم که وبسوکت، پروتکلی کارآمد برای برنامههای وبمحور است. با استفاده از پروتکل مذکور قادر به ایجاد ارتباطات دوطرفه پایدار میان مرورگر و سرور با هدف ارسال حجم زیادی از دادهها هستید. همچنین، وبسوکت گزینه مناسبی برای برنامههای آنلاینی است که با هدف برقراری چت آنلاین نوشته میشوند؛ برنامههایی که باید سرعت و عملکرد بالایی داشته باشند تا بدون مشکل امکان برقراری ارتباطات را بهوجود آورند.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟